Mam następujący hashmap w javie:
{B046 = 0,0, A061 = 3,0, A071 = 0,0, B085 = 0,0, B075 = 3,0, B076 = 9,0, B086 = 3,0, B095 = 0,0, B096 = 0,0, A052 = 0,0, B066 = 0,0, B056 = 9,0, B065 = 0,0, B055 = 9,0}
Jak mam posortować hashmap tak, aby brany był pod uwagę alfabet, po którym następują cyfry?
Wynikowy hashmap powinien wyglądać następująco:
{A052 = 0,0, A061 = 3,0, A071 = 0,0, B046 = 0,0, B055 = 9,0, B056 = 9,0, B065 = 0,0, B066 = 0,0, B075 = 3,0, B076 = 9,0, B085 = 0,0, B086 = 3,0, B095 = 0,0, B096 = 0,0}
Doceń pomoc!
Odpowiedzi:
Użyj posortowane
TreeMap
:Map<String, Float> map = new TreeMap<>(yourMap);
Automatycznie umieści wpisy posortowane według kluczy. Myślę, że naturalne
String
porządkowanie będzie w Twoim przypadku w porządku.Zauważ, że
HashMap
ze względu na optymalizacje wyszukiwania nie zachowuje porządku.źródło
Użyj TreeMap z niestandardowym komparatorem.
class MyComparator implements Comparator<String> { public int compare(String o1,String o2) { // Your logic for comparing the key strings } } TreeMap<String, Float> tm = new TreeMap<String , Float>(new MyComparator());
W miarę dodawania nowych elementów będą one automatycznie sortowane.
W twoim przypadku implementacja komparatora może nawet nie być konieczna, ponieważ porządkowanie String może być wystarczające. Ale jeśli chcesz zaimplementować specjalne przypadki, takie jak małe litery alfabetu pojawiają się przed dużymi literami lub traktuje liczby w określony sposób, użyj komparatora.
źródło
TreeMap
jest najlepszym rozwiązaniem dla tego rodzaju sortowania (Naturalne).TreeMap
naturalnie sortuje według kluczy.HashMap
nie zachowuje kolejności reklamowej ani nie sortuje mapy.LinkedHashMap
zachowuje kolejność reklam, ale nie sortuje mapy automatycznie. TylkoTreeMap
wMap
interfejsie sortuje mapę zgodnie z naturalną kolejnością (najpierw cyfry, wielkie litery na drugim, małe litery na końcu).źródło
Użyj TreeMap , chociaż posiadanie mapy „tak wyglądającej” jest trochę niejasne - możesz także po prostu posortować klucze na podstawie kryteriów i iterować po mapie, pobierając każdy obiekt.
źródło
Po prostu użyj
TreeMap
. ImplementujeSortedMap
interfejs, a tym samym automatycznie sortuje zawarte w nim klucze. Twoje klucze można po prostu posortować alfabetycznie, aby uzyskać pożądany wynik, więc nie musisz nawet podawać porównania.HashMapy nigdy nie są sortowane. Jedyną rzeczą, którą możesz zrobić z HashMap, jest pobranie wszystkich kluczy i zapisanie ich w posortowanym zestawie lub na liście i posortowanie listy.
źródło
Używając TreeMap możesz sortować Mapę.
Map<String, String> map = new HashMap<String, String>(); Map<String, String> treeMap = new TreeMap<String, String>(map); //show hashmap after the sort for (String str : treeMap.keySet()) { System.out.println(str); }
źródło
Możesz użyć,
TreeMap
który będzie przechowywać wartości w posortowanej formie.Map <String, String> map = new TreeMap <String, String>();
źródło
Użyj TreeMap (Konstruktor):
Map<String, Float> sortedMap = new TreeMap<>(yourMap);
Użyj TreeMap (metoda PutAll):
Map<String, Float> sortedMap = new TreeMap<>(); sortedMap.putAll(yourMap);
Implementacja interfejsu Map:
źródło
TreeMap automatycznie posortuje w kolejności rosnącej. Jeśli chcesz posortować w kolejności malejącej, użyj następującego kodu:
Skopiuj poniższy kod w swojej klasie i poza główną metodą wykonywania:
static class DescOrder implements Comparator<String> { @Override public int compare(String o1, String o2) { return o2.compareTo(o1); } }
Następnie w swojej logice:
TreeMap<String, String> map = new TreeMap<String, String>(new DescOrder()); map.put("A", "test1"); map.put("C", "test3"); map.put("E", "test5"); map.put("B", "test2"); map.put("D", "test4");
źródło