Ich habe die folgende Hashmap in Java:
{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}
Wie soll ich die Hashmap so sortieren, dass das Alphabet gefolgt von den Zahlen berücksichtigt wird?
Die resultierende Hashmap sollte folgendermaßen aussehen:
{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}
Schätzen Sie die Hilfe!
Antworten:
Verwenden Sie sortiert
TreeMap
:Map<String, Float> map = new TreeMap<>(yourMap);
Es werden automatisch Einträge sortiert nach Schlüsseln. Ich denke, natürliche
String
Bestellung wird in Ihrem Fall in Ordnung sein.Beachten Sie, dass
HashMap
aufgrund von Suchoptimierungen die Reihenfolge nicht erhalten bleibt.quelle
Verwenden Sie eine TreeMap mit einem benutzerdefinierten Komparator.
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());
Wenn Sie neue Elemente hinzufügen, werden diese automatisch sortiert.
In Ihrem Fall ist möglicherweise nicht einmal die Implementierung eines Komparators erforderlich, da die Reihenfolge der Zeichenfolgen möglicherweise ausreichend ist. Wenn Sie jedoch Sonderfälle implementieren möchten, z. B. Kleinbuchstaben vor Großbuchstaben, oder die Zahlen auf eine bestimmte Weise behandeln möchten, verwenden Sie den Komparator.
quelle
TreeMap
ist die beste Wahl für diese Art der Sortierung (natürlich).TreeMap
natürlich sortiert nach den Schlüsseln.HashMap
behält weder die Einfügereihenfolge bei noch sortiert es die Karte.LinkedHashMap
behält die Einfügereihenfolge bei, sortiert die Karte jedoch nicht automatisch. NurTreeMap
in derMap
Benutzeroberfläche wird die Karte nach natürlicher Reihenfolge sortiert (Ziffern zuerst, Großbuchstaben zweitens, Kleinbuchstaben zuletzt).quelle
Verwenden Sie eine TreeMap , obwohl es etwas nebulös ist, eine Karte "so aussehen" zu lassen. Sie können die Schlüssel auch einfach nach Ihren Kriterien sortieren und über die Karte iterieren und jedes Objekt abrufen.
quelle
Verwenden Sie einfach eine
TreeMap
. Es implementiert dieSortedMap
Schnittstelle und sortiert somit automatisch die darin enthaltenen Schlüssel. Ihre Schlüssel können einfach alphabetisch sortiert werden, um das gewünschte Ergebnis zu erzielen, sodass Sie nicht einmal einen Komparator bereitstellen müssen.HashMaps werden niemals sortiert. Das einzige, was Sie mit einer HashMap tun können, ist, alle Schlüssel abzurufen, sie in einem sortierten Satz oder in einer Liste zu speichern und die Liste zu sortieren.
quelle
Mit der TreeMap können Sie die Karte sortieren.
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); }
quelle
Sie können verwenden
TreeMap
, um Werte in sortierter Form zu speichern.Map <String, String> map = new TreeMap <String, String>();
quelle
TreeMap wird automatisch in aufsteigender Reihenfolge sortiert. Wenn Sie in absteigender Reihenfolge sortieren möchten, verwenden Sie den folgenden Code:
Kopieren Sie den folgenden Code innerhalb Ihrer Klasse und außerhalb der Hauptausführungsmethode:
static class DescOrder implements Comparator<String> { @Override public int compare(String o1, String o2) { return o2.compareTo(o1); } }
Dann in Ihrer Logik:
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");
quelle
Verwenden Sie TreeMap (Konstruktor):
Map<String, Float> sortedMap = new TreeMap<>(yourMap);
Verwenden Sie TreeMap (PutAll-Methode):
Map<String, Float> sortedMap = new TreeMap<>(); sortedMap.putAll(yourMap);
Implementierung der Kartenschnittstelle:
quelle