2013-02-20 3 views
13

Я хочу найти что-то вроде ImmutableLinkedHashMap<> в библиотеке Гуава. Мне нужно использовать неизменяемую структуру данных ключевого значения с порядком вставки. Итак, что я должен использовать?Мне нужна неизменная структура ключевого значения, которая сохраняет порядок вставки

+2

См. [Пакет com.google.common.collect Описание] (http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/package-summary.html#package_description) и [ImmutableCollectionsExplained на Guava wiki] (https://code.google.com/p/guava-libraries/wiki/ImmutableCollectionsExplained). – Xaerxess

+0

Возможный дубликат [Порядок итераций ImmublableMap Google Collections] (http://stackoverflow.com/questions/3810738/google-collections-immutablemap-iteration-order) – Barett

ответ

24

Я не уверен, что я понять, что именно вы после этого, но если это действительно неизменны Map, вы mght хотите посмотреть на ImmutableMap

Как уже упоминалось в документ:

An неизменяемый, хэш-код Map с надежным заданием итерации, заданным пользователем. Не разрешает нулевые ключи или значения.

В отличие от Collections.unmodifiableMap(java.util.Map<? extends K, ? extends V>), который является видом отдельной карты, которую все еще можно изменить, экземпляр ImmutableMap содержит свои данные и никогда не будет меняться. ImmutableMap удобен для public static final карт («постоянные карты»), а также позволяет легко сделать «оборонительную копию» карт, предоставленных в класс по вызывающим

например, вы могли бы использовать его аналогичным образ:

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

Надеюсь, это то, что вам нужно.

+0

Да, я просто собирался это сказать. 'ImmutableMap' выглядит так, как будто он должен работать. – 808sound

+0

Проблема заключается в том, что 'ImmutableSortedMap' расширяет' ImmutableMap', поэтому, если у вас есть клиенты этого метода, вы не можете принудительно поддерживать обслуживание порядка вставки по типам. –

6

Сначала создайте LinkedHashMap, а затем используйте ImmutableMap.copyOf(linkedHashMap), чтобы создать неизменяемую копию, которая будет иметь тот же порядок, что и исходная карта.

+17

Зачем беспокоиться? 'ImmutableMap' уже использует порядок вставки. –

Смежные вопросы