Also, ich habe gerade das Javadoc für ArrayListMultimap
und LinkedListMultimap
gelesen, um zu verstehen, wie man sie benutzt, und ich erkannte, dass beide Duplikate Schlüssel-Wert-Paar unterstützen (und damit gleiche Schlüssel, anders Werte - wenn ich das richtig verstehe, korrigiere mich bitte, wenn ich falsch liege. Ich verstehe jedoch nicht den Unterschied zwischen ihnen. Beide werden zum Speichern von doppelten Schlüsselwertpaaren verwendet. Ist der einzige Teil, den sie unterscheiden, ihre Implementierung, d. H.% Co_de% ist als Array implementiert und ArrayListMultimap
ist als LinkedList implementiert? Wie unterscheiden sie sich in der Leistung? Ich weiß, dass ich viel frage, aber ich weiß nicht wirklich wo sonst, um Antworten dafür zu finden.
Es ist in den Dokumenten ... und im Code. Abgesehen von einem Unterschied, den Sie bereits gesehen haben ( List
Implementierungsauswahl), verwenden sie auch eine andere Map
Implementierung. Also:
ArrayListMultimap
verwendet HashMap
für die Zuordnung von Karten und ArrayList
cor, was bedeutet, dass die Iterationsreihenfolge solcher Methoden wie entries()
, asMap().keySet()
oder asMap.entrySet()
nicht definiert ist. Es ist einfach und einfach Umsetzung von ListMultimap
und Sie sollten mit diesem beginnen. LinkedListMultimap
verwendet LinkedList
für die Sammlung und spezialisierte Datenstruktur (benutzerdefinierte verknüpfte Liste), um die Iterationsreihenfolge der oben genannten Methoden beizubehalten:
Der Auftrag wird über eine verknüpfte Liste verwaltet, die alle Schlüsselwerte enthält Paare. Darüber hinaus eine Reihe von disjunkten verknüpften Listen von "Geschwister", die jeweils die Werte für einen bestimmten Schlüssel enthalten, werden verwendet Implementieren von ValueForKeyIterator in konstanter Zeit.
Zusätzlich verwendet es nur wenige andere Strukturen, um "Linked List" -ähnliches Verhalten aufrechtzuerhalten:
%Vor% Außerdem ist der Speicherbedarf eine Folge von Sicherungskopien, die in diesen Multimap
-Implementierungen verwendet werden - siehe Dieser Vergleich (möglicherweise nicht 100% aktuell).
Wenn ich effiziente, veränderbare ListMultimap
mit definierter Iterationsreihenfolge von Schlüsseln brauche, benutze ich "custom" ListMultimap
(erstellt mit %Co_de% , das seit v16.0 in Guava ist:
Vor Version 16.0 war das Erstellen von benutzerdefiniertem% co_de% s ausführlicher (mit MultimapBuilder
):