2012-09-01 12 views
5

Powiel możliwe:
How to sort a Map<Key, Value> on the values in Java?sortowanie java HashMap <String, Integer>. Jak to posortować?

W moim projekcie, brałem HashMap jak ten

stopni HashMap = new HashMap();

Załóżmy, że mam:

degree.put("a",5); 
degree.put("b",2); 
degree.put("c",4); 
degree.put("d",2); 
degree.put("e",3); 
degree.put("f",5); 

Teraz muszę sortowanie listy według danej Integer wartości

Sort HashMap Powinno być:

{a = 5, f = 5, c = 4, e = 4, b = 4, d = 2}

Jak mogę to zrobić?

+0

Wydaje mi się, że oryginalna mapa HashMap posortowana według wartości całkowitych byłaby w rzeczywistości równa {a = 5, f = 5, c = 4, e = 3, b = 2, d = 2}. –

+0

Sprawdź to http://stackoverflow.com/questions/109383/how-to-sort-a-mapkey-value-on-the-values-in-java – SiB

Odpowiedz

11

A HashMap jest nieuporządkowana kolekcja. Nie ma porządku sortowania. Nawet TreeMap sortuje według klucza, a nie wartości.

Jeśli chcesz przygotować listę posortowaną według kolejności sortowania wartości, musisz utworzyć odpowiedni obiekt, taki jak ArrayList<Map.Entry<String,Integer>>, iteracyjne nad HashMap i włóż wszystkie wpisy, a następnie zadzwonić z Collections.sort funkcja sortowania.

4

Jeśli chcesz posortować mapę, HashMap nie jest najlepszym rozwiązaniem.

Proponuję przejrzeć TreeMap, ponieważ jest on posortowany. Można ustawić komparator do porównywania wartości zamiast kluczy, jak robią to w tej odpowiedzi:

https://stackoverflow.com/a/1283722/975959

+0

Lepiej nie planuj wywoływania .get() na tej mapie drzewa jeśli patrzy na wartości. – bmargulies

0

można zrobić insertion sort zbudować nową hashmap od oryginału (trwa pamięć x2 i jest bardzo nieefektywne). Tak więc, będziesz musiał użyć metod .get() i .set() z hashmapu prawie n * n (najgorszy przypadek) razy, gdzie n jest liczbą elementów.

1
ArrayList<Integer> sortedHashMap=new ArrayList<Integer>(); 

for("your Object" m : degree.values()) 
{ 
     sortedHashMap.add(m); 
} 

collections.sort(sortedHashMap); 

dzięki czemu możesz wydrukować swoją mapę hash jako posortowane hashMap!

Powiązane problemy