tl; dr
Verwenden Sie eine der Map
mit Java 6 und höher gebündelten Implementierungen NavigableMap
(der Nachfolger von SortedMap
):
- Verwenden Sie
TreeMap
diese Option, wenn Single-Threaded ausgeführt wird oder wenn die Map nach dem ersten Auffüllen für alle Threads schreibgeschützt sein soll.
- Verwenden Sie
ConcurrentSkipListMap
diese Option, wenn Sie die Map über mehrere Threads hinweg bearbeiten.
NavigableMap
Zu Ihrer Information, die SortedMap
Schnittstelle wurde von der NavigableMap
Schnittstelle abgelöst.
Sie müssen nur verwenden, SortedMap
wenn Sie Implementierungen von Drittanbietern verwenden, deren Unterstützung noch nicht deklariert wurde NavigableMap
. Von den mit Java gebündelten Karten werden auch beide implementierten Implementierungen SortedMap
implementiert NavigableMap
.
Schnittstelle versus konkrete Klasse
s SortedMap die beste Antwort? TreeMap?
Wie andere erwähnt haben, SortedMap
handelt es sich um eine Schnittstelle, während TreeMap
es sich um eine von mehreren Implementierungen dieser Schnittstelle (und der neueren) handelt NavigableMap
.
Mit einer Schnittstelle können Sie Code schreiben, der die Map verwendet, ohne zu brechen, wenn Sie später zwischen Implementierungen wechseln.
NavigableMap< Employee , Project > currentAssignments = new TreeSet<>() ;
currentAssignments.put( alice , writeAdCopyProject ) ;
currentAssignments.put( bob , setUpNewVendorsProject ) ;
Dieser Code funktioniert weiterhin, wenn später Implementierungen geändert werden. Möglicherweise benötigen Sie später eine Map, 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.
Implementierung auswählen
Es gibt zehn Map
mit Java 11 gebündelte Implementierungen. Weitere Implementierungen werden von Drittanbietern wie Google Guava bereitgestellt .
Hier ist eine grafische Tabelle, die ich erstellt habe, um die verschiedenen Funktionen der 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. Außerdem EnumMap
hält die Tasten in der Reihenfolge der auf dieser Enumeration definierten Objekte. Zuletzt LinkedHashMap
merkt sich die ursprüngliche Einfügereihenfolge.