2013-02-20 12 views
13

Voglio trovare qualcosa come ImmutableLinkedHashMap<> nella libreria Guava. Ho bisogno di utilizzare una struttura di dati valore-chiave immutabile con un ordine di inserimento. Quindi, cosa dovrei usare?Ho bisogno di una struttura di valori-chiave immutabile che mantenga l'ordine di inserimento

+2

Vedere [Descrizione pacchetto com.google.common.collect] (http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/package-summary.html#package_description) e [ImmutableCollectionsExplained su wiki Guava] (https://code.google.com/p/guava-libraries/wiki/ImmutableCollectionsExplained). – Xaerxess

+0

Possibile duplicato di [Ordine di iterazione ImmutableMap di Google Collections] (http://stackoverflow.com/questions/3810738/google-collections-immutablemap-iteration-order) – Barett

risposta

24

io non sono sicuro che sto capire esattamente che cosa siete dopo, ma se si tratta di una realtà immutabile Map, si mght voglio guardare ImmutableMap

Come menzionato nel documento:

An immutabile, basato su hash Map con ordine di iterazione specificato dall'utente specificato. Non consente chiavi o valori nulli.

A differenza di Collections.unmodifiableMap(java.util.Map<? extends K, ? extends V>), che è una vista di una mappa separata che può ancora cambiare, un'istanza di ImmutableMap contiene i propri dati e non cambierà mai. ImmutableMap è conveniente per public static final mappe ("mappe costanti") e consente inoltre di effettuare facilmente una "copia difensiva" di una mappa fornita alla classe da un chiamante

Ad esempio, si potrebbe usare in modo simile:

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

Spero che questo sia quello che cercavi.

+0

Sì, stavo per dire anche questo. 'ImmutableMap' sembra che dovrebbe funzionare. – 808sound

+0

Il problema è che "ImmutableSortedMap" estende "ImmutableMap", quindi se si dispone di client con questo metodo, non è possibile imporre la manutenzione degli ordini di inserimento in base ai tipi. –

6

Creare prima un LinkedHashMap e quindi utilizzare ImmutableMap.copyOf(linkedHashMap) per creare una copia immutabile che avrà lo stesso ordine della mappa originale.

+17

Perché preoccuparsi? 'ImmutableMap' utilizza già l'ordine di inserimento. –