logo

Как да сортирате HashMap в Java

Java HashMap не запазва никакъв ред по подразбиране. Ако има нужда от сортиране на HashMap, ние го сортираме изрично въз основа на изискванията. Java предоставя опция за сортиране на HashMap въз основа на ключове и стойности. В този раздел ще научим как да сортираме HashMap според ключове и стойности.

  • Сортирайте HashMap по ключове
  • Сортирайте HashMap по стойности

Сортирайте HashMap по ключове

Има следните начини за сортиране на HashMap по ключове:

  • Като се използва TreeMap
  • Като се използва LinkedHashMap

Когато използваме LinkedHashMap, трябва да следваме процеса:

Когато използваме LinkedHashMap, трябва да зададем ключ. Преобразувайте набора в списък, сортирайте списъка и след това добавете сортирания списък в LinkedHashMap в същия ред. Същият процес, който направихме в примера Сортирайте HashMap по стойност .

Пример за сортиране на HashMap по ключове

В следващия пример използваме конструктор TreeMap, за да сортираме елементите и да подадем обекта на класа HashMap като аргумент. Това е най-лесният начин за сортиране на HashMap по ключове.

 import java.util.Map; import java.util.HashMap; import java.util.TreeMap; import java.util.Iterator; public class SortHashMapByKeys { public static void main(String args[]) { //implementation of HashMap HashMap hm=new HashMap(); //addding keys and values to HashMap hm.put(23, 'Yash'); hm.put(17, 'Arun'); hm.put(15, 'Swarit'); hm.put(9, 'Neelesh'); Iterator it = hm.keySet().iterator(); System.out.println('Before Sorting'); while(it.hasNext()) { int key=(int)it.next(); System.out.println('Roll no: '+key+' name: '+hm.get(key)); } System.out.println('
'); Map map=new HashMap(); System.out.println('After Sorting'); //using TreeMap constructor to sort the HashMap TreeMap tm=new TreeMap (hm); Iterator itr=tm.keySet().iterator(); while(itr.hasNext()) { int key=(int)itr.next(); System.out.println('Roll no: '+key+' name: '+hm.get(key)); } } } 

Изход:

 Before Sorting Roll no: 17 name: Arun Roll no: 23 name: Yash Roll no: 9 name: Neelesh Roll no: 15 name: Swarit After Sorting Roll no: 9 name: Neelesh Roll no: 15 name: Swarit Roll no: 17 name: Arun Roll no: 23 name: Yash 

Сортирайте HashMap по стойности с помощта на интерфейс за сравнение

В Java сортирането на HashMap по стойности е сложно, защото няма наличен директен метод. За да сортираме HashMap по стойности, трябва да създадем a Компаратор . Той сравнява два елемента въз основа на стойностите.

След това вземете набора от елементи от картата и преобразувайте набора в списъка. Използвай Collections.sort(списък) метод за сортиране на списъка с елементи по стойности чрез предаване на персонализиран компаратор. Сега създайте нов LinkedHashMap и копирайте сортираните елементи в това. От LinkedHashMap гарантира реда на вмъкване на съпоставянията. Получаваме HashMap, чиито стойности са в сортиран ред.

Актьор Реха

Има малка разлика между сортирането на HashMap по ключове и стойности е, че може да има дублирани стойности, но не и дублирани ключове. Не можем да използваме TreeMap за сортиране на стойности, защото TreeMap сортира елементите по ключове.

Пример за сортиране на HashMap по стойности

 import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; public class SortHashMapValue { public static void main(String[] args) { //implementing HashMap HashMap hm = new HashMap(); hm.put(6, 'Tushar'); hm.put(12, 'Ashu'); hm.put(5, 'Zoya'); hm.put(78, 'Yash'); hm.put(10, 'Praveen'); hm.put(67, 'Boby'); hm.put(1, 'Ritesh'); System.out.println('Before Sorting:'); Set set = hm.entrySet(); Iterator iterator = set.iterator(); while(iterator.hasNext()) { Map.Entry map = (Map.Entry)iterator.next(); System.out.println('Roll no: '+map.getKey()+' Name: '+map.getValue()); } Map map = sortValues(hm); System.out.println('
'); System.out.println('After Sorting:'); Set set2 = map.entrySet(); Iterator iterator2 = set2.iterator(); while(iterator2.hasNext()) { Map.Entry me2 = (Map.Entry)iterator2.next(); System.out.println('Roll no: '+me2.getKey()+' Name: '+me2.getValue()); } } //method to sort values private static HashMap sortValues(HashMap map) { List list = new LinkedList(map.entrySet()); //Custom Comparator Collections.sort(list, new Comparator() { public int compare(Object o1, Object o2) { return ((Comparable) ((Map.Entry) (o1)).getValue()).compareTo(((Map.Entry) (o2)).getValue()); } }); //copying the sorted list in HashMap to preserve the iteration order HashMap sortedHashMap = new LinkedHashMap(); for (Iterator it = list.iterator(); it.hasNext();) { Map.Entry entry = (Map.Entry) it.next(); sortedHashMap.put(entry.getKey(), entry.getValue()); } return sortedHashMap; } } 

Изход:

 Before Sorting: Roll no: 1 Name: Ritesh Roll no: 67 Name: Boby Roll no: 5 Name: Zoya Roll no: 6 Name: Tushar Roll no: 10 Name: Praveen Roll no: 12 Name: Ashu Roll no: 78 Name: Yash After Sorting: Roll no: 12 Name: Ashu Roll no: 67 Name: Boby Roll no: 10 Name: Praveen Roll no: 1 Name: Ritesh Roll no: 6 Name: Tushar Roll no: 78 Name: Yash Roll no: 5 Name: Zoya