2013-02-20 5 views
13

Ich möchte etwas wie ImmutableLinkedHashMap<> in Guava-Bibliothek zu finden. Ich muss eine unveränderliche Schlüssel-Wert-Datenstruktur mit einem Anzeigenauftrag verwenden. Also, was soll ich verwenden?Ich brauche eine unveränderliche Schlüssel-Wert-Struktur, die Einfügereihenfolge

+2

Siehe [Paket com.google.common.collect Beschreibung] (http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/package-summary.html#package_description) und [Unveränderliche Sammlungen auf Guava Wiki erklärt] (https://code.google.com/p/guava-libraries/wiki/ImmutableCollectionsExplained). – Xaerxess

+0

Mögliches Duplikat von [Google Collections ImmutableMap-Iterationsreihenfolge] (http://stackoverflow.com/questions/3810738/google-collections-immutablemap-iteration-order) – Barett

Antwort

24

Ich bin nicht sicher, ob ich genau bin zu verstehen, was Sie nach, aber wenn es ein wirklich unveränderlich Map ist, mght Sie bei ImmutableMap

aussehen wollen wie im doc erwähnt:

Ein unveränderbar, Hash-basiert Map mit zuverlässiger benutzerspezifizierter Iterationsreihenfolge. Erlaubt keine Nullschlüssel oder Werte.

Im Gegensatz zu Collections.unmodifiableMap(java.util.Map<? extends K, ? extends V>), die eine Ansicht einer separaten Karte ist, die sich noch ändern kann, enthält eine Instanz ImmutableMap ihre eigenen Daten und wird sich nie ändern. ImmutableMap ist bequem für public static final Karten („constant Maps“) und lässt Sie auch einfach eine „defensive Kopie“ einer Karte auf Ihre Klasse von einem Anrufer

Eg vorgesehen machen, können Sie es in ähnlicher Weise verwenden:

Map<Integer, String> m = ImmutableMap.of(5,"Five",6,"Six",7,"Seven"); 

Hoffe, das war, was Sie wollten.

+0

Ja, ich wollte das auch sagen. 'ImmutableMap' sieht aus wie es funktionieren sollte. – 808sound

+0

Das Problem dabei ist, dass "ImmutableSortedMap" "ImmutableMap" erweitert, sodass Sie, wenn Sie über Clients dieser Methode verfügen, die Wartung von Anzeigenaufträgen nicht nach Typen erzwingen können. –

6

Erstellen Sie zunächst eine und verwenden Sie dann ImmutableMap.copyOf(linkedHashMap), um eine unveränderbare Kopie zu erstellen, die die gleiche Reihenfolge wie die ursprüngliche Karte hat.

+17

Warum stören? 'ImmutableMap' verwendet bereits den Anzeigenauftrag. –

Verwandte Themen