logo

Java'da HashMap Nasıl Sıralanır

Java HashMap varsayılan olarak herhangi bir sırayı korumaz. HashMap'i sıralamaya ihtiyaç varsa, onu açıkça gereksinimlere göre sıralarız. Java, HashMap'i anahtarlara ve değerlere göre sıralama seçeneği sunar. Bu bölümde HashMap'in anahtarlara ve değerlere göre nasıl sıralanacağını öğreneceğiz.

  • HashMap'i Anahtarlara Göre Sıralayın
  • HashMap'i Değerlere Göre Sıralayın

HashMap'i Anahtarlara Göre Sıralayın

HashMap'i anahtarlara göre sıralamanın aşağıdaki yolları vardır:

  • Kullanarak Ağaç Haritası
  • Kullanarak LinkedHashMap

LinkedHashMap kullandığımızda şu süreci izlemeliyiz:

LinkedHashMap kullandığımızda Key setini almamız gerekiyor. Kümeyi Listeye dönüştürün, listeyi sıralayın ve ardından sıralanan listeyi aynı sırayla LinkedHashMap'e ekleyin. Örnekte yaptığımız işlemin aynısı HashMap'i Değere Göre Sırala .

HashMap'i Anahtarlara göre sıralama örneği

Aşağıdaki örnekte, elemanları sıralamak ve HashMap sınıfının nesnesini argüman olarak iletmek için TreeMap yapıcısını kullanıyoruz. Bu, HashMap'i Anahtarlara göre sıralamanın en basit yoludur.

 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)); } } } 

Çıktı:

 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 

Karşılaştırıcı Arayüzünü Kullanarak HashMap'i Değerlere Göre Sıralayın

Java'da HashMap'i değerlere göre sıralamak karmaşıktır çünkü doğrudan bir yöntem mevcut değildir. HashMap'i değerlere göre sıralamak için bir Karşılaştırıcı . Değerlere göre iki öğeyi karşılaştırır.

Bundan sonra Haritadan element Kümesini alın ve Kümeyi Listeye dönüştürün. Kullan Koleksiyonlar.sort(Liste) özelleştirilmiş karşılaştırıcıyı geçerek öğelerin listesini değerlere göre sıralama yöntemi. Şimdi yeni bir tane oluştur LinkedHashMap ve sıralanan öğeleri buna kopyalayın. O zamandan beri LinkedHashMap eşlemelerin ekleme sırasını garanti eder. Değerleri sıralanmış bir HashMap elde ediyoruz.

15/100,00

HashMap'i Anahtarlara ve Değerlere göre sıralamak arasında küçük bir fark vardır; yinelenen değerlere sahip olabilir ancak yinelenen Anahtarlara sahip olamaz. TreeMap öğeleri Anahtarlara göre sıraladığından, değerleri sıralamak için TreeMap'i kullanamayız.

HashMap'i değerlere göre sıralama örneği

 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; } } 

Çıktı:

 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