2013-02-20 19 views
13

Chcę znaleźć coś w rodzaju biblioteki ImmutableLinkedHashMap<> w bibliotece Guava. Potrzebuję użyć niezmiennej struktury danych klucz-wartość ze zleceniem reklamowym. Więc, co powinienem użyć?Potrzebuję niezmiennej struktury klucz-wartość, która zachowuje kolejność wprowadzania

+2

Zobacz [Pakiet com.google.common.collect Description] (http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/package-summary.html#package_description) i [ImmutableCollectionsExplained na wiki Guava] (https://code.google.com/p/guava-libraries/wiki/ImmutableCollectionsExplained). – Xaerxess

+0

Możliwy duplikat [Google ImmutableMap iteration order] (http://stackoverflow.com/questions/3810738/google-collections-immutablemap-iteration-order) – Barett

Odpowiedz

24

Nie jestem pewien, mam dokładnie zrozumieć, co jesteś po, ale jeśli jest to naprawdę niezmienne Map, mght chcesz spojrzeć na ImmutableMap

Jak wspomniano w dokumencie:

An niezmienny, oparty na hashu Map z niezawodną kolejnością iteracji określoną przez użytkownika. Nie zezwala na puste klucze ani wartości.

W przeciwieństwie do Collections.unmodifiableMap(java.util.Map<? extends K, ? extends V>), który jest widokiem oddzielnej mapy, która wciąż może się zmienić, wystąpienie ImmutableMap zawiera własne dane i nigdy się nie zmieni. ImmutableMap jest wygodne dla public static final mapy („Constant mapy”), a także pozwala łatwo zrobić „kopię obronną” z mapą przewidzianego do klasy przez dzwoniącego

przykład można użyć go w podobny sposób:

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

Mam nadzieję, że właśnie o to prosiłeś.

+0

Tak, chciałem to również powiedzieć. Wygląda na to, że 'ImmutableMap' powinno działać. – 808sound

+0

Problem polega na tym, że 'ImmutableSortedMap' rozszerza' ImmutableMap', więc jeśli posiadasz klientów tej metody, nie możesz wymusić konserwacji zlecenia przez typy. –

6

Najpierw utwórz LinkedHashMap, a następnie użyj ImmutableMap.copyOf(linkedHashMap), aby utworzyć niezmienną kopię, która będzie miała taką samą kolejność, jak oryginalna mapa.

+17

Po co zawracać sobie głowę? 'ImmutableMap' już używa kolejności reklam. –