Warum tust du new Integer(n) statt nur die nackte ganze Zahl?
– Adam_G
30. Juli 2015 um 23:05 Uhr
@Adam_G Kein besonderer Grund, ich denke, als ich diese Antwort schrieb, war ich nicht an Auto-Boxing gewöhnt (?).
– Barth
29. August 2015 um 12:57 Uhr
Tom Jeffreys
Eine TreeMap ist wahrscheinlich der einfachste Weg, dies zu tun. Sie verwenden es genau wie eine normale Map. dh
Map<Float,String> mySortedMap = new TreeMap<Float,MyObject>();
// Put some values in it
mySortedMap.put(1.0f,"One");
mySortedMap.put(0.0f,"Zero");
mySortedMap.put(3.0f,"Three");
// Iterate through it and it'll be in order!
for(Map.Entry<Float,String> entry : mySortedMap.entrySet()) {
System.out.println(entry.getValue());
} // outputs Zero One Three
Wenn Sie dies immer möchten, erstellen Sie die Karte in absteigender Reihenfolge, wenn Sie sie nur einmal benötigen, erstellen Sie eine TreeMap mit absteigender Reihenfolge und fügen Sie alle Daten aus der ursprünglichen Karte ein.
// Create the map and provide the comparator as a argument
Map<Float, String> dscsortedMAP = new TreeMap<Float, String>(new Comparator<Float>() {
@Override
public int compare(Float o1, Float o2) {
return o2.compareTo(o1);
}
});
dscsortedMAP.putAll(ascsortedMAP);
Ich würde diese Antwort bevorzugen, da sie das macht, wofür die SortedMap entwickelt wurde, indem sie den Comparator verwendet
– CodeToLife
1. März 2018 um 19:08 Uhr
TreeMap, eine Implementierung der SortedMap-Schnittstelle, würde funktionieren.
Wie benutze ich es ?
Map<Float, MyObject> map = new TreeMap<Float, MyObject>();
Herr Schmidt
TreeMap Sortiert nach dem Schlüssel der natürlichen Reihenfolge. Die Schlüssel sollten implementieren Comparable oder kompatibel sein mit a Comparator (wenn Sie eine Instanz an den Konstruktor übergeben haben). In Ihrem Fall Float bereits umsetzt Comparable Sie müssen also nichts Besonderes tun.
Du kannst anrufen keySet um alle Schlüssel in aufsteigender Reihenfolge abzurufen.
tl;dr
Verwenden Sie eine der Map Implementierungen, die mit Java 6 und höher gebündelt sind, implementieren NavigableMap (Nachfolger von SortedMap):
Verwenden TreeMap wenn Single-Threaded ausgeführt wird oder wenn die Map nach dem ersten Auffüllen über Threads hinweg schreibgeschützt sein soll.
Verwenden ConcurrentSkipListMap wenn die Karte über Threads hinweg manipuliert wird.
Sie müssten nur verwenden SortedMap wenn Sie Implementierungen von Drittanbietern verwenden, die ihre Unterstützung noch nicht erklärt haben NavigableMap. Von den mit Java gebündelten Karten werden beide Implementierungen implementiert SortedMap auch umsetzen NavigableMap.
Schnittstelle versus konkrete Klasse
s SortedMap die beste Antwort? Baumkarte?
Wie andere erwähnt haben, SortedMap ist eine Schnittstelle während TreeMap ist eine von mehreren Implementierungen dieser Schnittstelle (und der neueren NavigableMap.
Wenn Sie über eine Schnittstelle verfügen, können Sie Code schreiben, der die Zuordnung verwendet, ohne dass dies unterbrochen wird, wenn Sie sich später entscheiden, zwischen Implementierungen zu wechseln.
NavigableMap< Employee , Project > currentAssignments = new TreeSet<>() ;
currentAssignments.put( alice , writeAdCopyProject ) ;
currentAssignments.put( bob , setUpNewVendorsProject ) ;
Dieser Code funktioniert immer noch, wenn später Implementierungen geändert werden. Vielleicht benötigen Sie später eine Zuordnung, die Parallelität für die Verwendung über Threads hinweg unterstützt. Ändern Sie diese Erklärung in:
NavigableMap< Employee , Project > currentAssignments = new ConcurrentSkipListMap<>() ;
… und der Rest Ihres Codes, der diese Karte verwendet, funktioniert weiterhin.
Umsetzung wählen
Es gibt zehn Implementierungen von Map gebündelt mit Java 11. Und weitere Implementierungen von Drittanbietern wie z Google Guave.
Hier ist eine grafische Tabelle, die ich erstellt habe, um die verschiedenen Merkmale jedes einzelnen hervorzuheben. Beachten Sie, dass zwei der gebündelten Implementierungen die Schlüssel in sortierter Reihenfolge halten, indem sie den Inhalt des Schlüssels untersuchen. Auch, EnumMap hält seine Schlüssel in der Reihenfolge der Objekte, die in dieser Aufzählung definiert sind. Zuletzt die LinkedHashMap merkt sich die ursprüngliche Insertionsreihenfolge.
Willem van der Veen
Du kannst den … benutzen TreeMap Klasse für diesen Zweck, die die implementiert SortedMap Schnittstelle.
Die Klasse TreeMap implementiert die NavigableMap Schnittstelle, die die erweitert SortedMap Schnittstelle.
Dies hat zur Folge, dass alle Schlüssel entsprechend ihrer Implementierung geordnet werden Comparable Schnittstelle.
Map<Integer, String> map = new TreeMap<>();
// Add Items to the TreeMap
map.put(9999, "foo");
map.put(23432, "bar");
map.put(6, "foobar");
map.put(12, "baz");
Die Schlüssel sind jetzt automatisch sortiert. Wenn wir sie durchlaufen, erhalten wir Folgendes:
Weil TreeMap Elemente müssen bestellt werden. Die Objekte, die als Schlüssel verwendet werden, müssen eine Implementierung von haben Comparable Schnittstelle. Der folgende Code löst beispielsweise einen Laufzeitfehler aus:
class Human{}
Map<Human, String> map = new TreeMap<>();
// Following throws a exception:
// Exception in thread "main" java.lang.ClassCastException:
// class Example$1Human cannot be cast to class java.lang.Comparable
map.put(new Human(), "baz");
14499500cookie-checkWie verwende ich die SortedMap-Schnittstelle oder TreeMap in Java?yes
Aber SortedMap ist eine Schnittstelle. TreeMap implementiert SortedMap.
– Herr Schmidt
15. September 2011 um 8:17 Uhr
Siehe die Antwort von gepostet
@user157196
hier stackoverflow.com/questions/109383/…– Bitmap
15. September 2011 um 8:18 Uhr
Suchen Sie nach der Antwort von Tom Jefferys
– Johnny Lambada
16. April 2014 um 0:54 Uhr
Zu Ihrer Information,
NavigableMap
Das in Java 6 hinzugefügte ersetzt das ältereSortedMap
.– Basilikum Bourque
18. Januar 2020 um 22:59 Uhr