Wie unterscheidet sich ArrayListMultimap von LinkedListMultimap?

7

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.

    
TheRookierLearner 20.02.2013, 08:54
quelle

1 Antwort

22

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%

Vor Version 16.0 war das Erstellen von benutzerdefiniertem% ​​co_de% s ausführlicher (mit MultimapBuilder ):

%Vor%     
Xaerxess 20.02.2013, 09:17
quelle

Tags und Links