2010-09-28 8 views
19

Ich brauche eine Kombination von Google Collection ImmutableMap und — unveränderliche Karte mit definierter Iterationsreihenfolge. Es scheint, dass ImmutableMap selbst tatsächlich Iterationsreihenfolge definiert hat, zumindest its documentation says:Google Sammlungen ImmutableMap Iterationsreihenfolge

eine unveränderliche, Hash-basierte Karte mit zuverlässigen Benutzer angegebenen Iterationsreihenfolge.

Allerdings gibt es keine weiteren Details. Schnelltest zeigt, dass dies wahr sein könnte, aber ich möchte sicherstellen. Leider hat mir der schnelle Blick in die Quellen nicht sehr geholfen.

Meine Frage ist: Kann ich auf Iterationsreihenfolge von ImmutableMap verlassen? Wenn ich ImmutableMap.copyOf(linkedHashMap) mache, wird es die gleiche Iterationsreihenfolge wie ursprünglich verknüpfte Hash-Karte haben? Was ist mit unveränderlichen Karten, die vom Builder erstellt wurden? Ein Link zur verbindlichen Antwort würde helfen, da Google nichts Nützliches gefunden hat. (Und nein, Links zu den Quellen zählen nicht).

+0

Ich glaube, Sammlungen wurde jetzt in die Guava-Bibliothek gefaltet. Aber die Dokumentation für ImmutableMap ist die gleiche. – Thilo

Antwort

17

Um genauer zu sein, die ImmutableMap factory Methoden und Builder gibt Instanzen zurück, die der Iterationsreihenfolge der Eingaben folgen Die Karte ist aufgebaut. Jedoch eine ImmutableSortedMap, die eine Unterklasse von ImmutableMap ist. sortiert die Schlüssel.

4

Sie sollten den Javadoc glauben. Wenn es nicht genug ist, lesen Sie den Quellcode oder melden Sie den Fehler.

Eine kurze Ansicht des Quellcodes zeigt, dass die Map von Array unterstützt wird und die Iteration über ImmutableSet erfolgt, das auch von einem Array unterstützt wird. Ich denke also, dass die Dokumentation korrekt ist und die Reihenfolge der Elemente so bleibt wie sie ist.

19

Ich habe tatsächlich Diskussion darüber gefunden, mit answers from library authors:

Kevin Bourrillion: Was wir mit „user-specified“ ist „kann, was um Sie es sein wollen werden“; Mit anderen Worten, die Reihenfolge, in der Sie uns die Einträge im ersten Platz geben, ist die Reihenfolge, die wir verwenden.

Jared Levy: Sie können auch eine TreeMap oder LinkedHashMap mit der gewünschten Reihenfolge kopieren.

Ja, ich hätte dem Javadoc geglaubt, obwohl ich denke, dass Javadoc in diesem Fall besser sein kann. Es scheint, ich bin nicht der erste, der davon verwirrt war. Wenn nichts anderes, hilft dieses Q/A Google das nächste Mal, wenn jemand nach "ImmutableMap Iteration" sucht:

+3

+1 Ich stimme Ihnen zu, dass der JavaDoc klarer sein könnte. Es gibt wahrscheinlich keine andere Interpretation für "zuverlässige benutzerspezifische Iterationsreihenfolge", aber eine etwas redundante Bemerkung zur copyOf() -Methode, dass die Iterationsreihenfolge der Quellkarte beibehalten wird, hätte nicht geschadet. Die ofof() - Familie von Methoden hat diese Art von Kommentar ("Gibt eine unveränderliche Map zurück, die die gegebenen Einträge in der richtigen Reihenfolge enthält.") – Thilo

+0

@Thilo: ah, ich habe diese Kommentare nicht für of() -Methoden bemerkt. Vielen Dank. –

Verwandte Themen