Spec-Zone .ru
спецификации, руководства, описания, API
|
Map
реализации группируются в и параллельные реализации специального назначения, общего назначения.
Три, общего назначения Map
реализации HashMap
TreeMap
LinkedHashMap
SortedMap
операции или упорядоченный ключом Collection
- итерация представления, использовать TreeMap
; если Вы хотите максимальную скорость и не заботитесь об итеративном порядке, использовать HashMap
; если Вы хотите почтиHashMap
производительность и итерация порядка вставки, использовать LinkedHashMap
. В этом отношении, ситуация для Map
походит Set
. Аналогично, все остальное в разделе Map
реализации.
LinkedHashMap
обеспечивает две возможности, которые не доступны с LinkedHashSet
. Когда Вы создаете a LinkedHashMap
, можно упорядочить это основанный на ключевом доступе, а не вставке. Другими словами просто поиск значения, связанного с ключом, приносит тот ключ до конца карты. Кроме того, LinkedHashMap
обеспечивает removeEldestEntry
метод, который может быть переопределен, чтобы наложить политику для того, чтобы удалить устарелые отображения автоматически, когда новые отображения добавляются к карте. Это делает очень легким реализовать пользовательский кэш.
Например, это переопределение позволит карте расти к целых 100 записям, и затем это удалит старшую запись каждый раз, когда новая запись добавляется, поддерживая устойчивое состояние 100 записей.
private static final int MAX_ENTRIES = 100; protected boolean removeEldestEntry(Map.Entry eldest) { return size() > MAX_ENTRIES; }
Есть три реализации Карты специального назначения — EnumMap
, WeakHashMap
IdentityHashMap
EnumMap
, который внутренне реализуется как array
, высокоэффективное Map
реализация для использования с перечислимыми ключами. Эта реализация комбинирует богатство и безопасность Map
интерфейс со скоростью, приближающейся к тому из массива. Если Вы хотите отобразить перечисление на значение, следует всегда использовать EnumMap
в предпочтении к массиву.
WeakHashMap
реализация Map
интерфейс, который хранит только слабые ссылки на его ключи. Хранение только слабые ссылки позволяют паре ключ/значение быть собранной "мусор", когда на ее ключ больше не ссылаются за пределами WeakHashMap
. Этот class обеспечивает самый легкий способ использовать питание слабых ссылок. Это полезно для реализации "подобных реестру" структур данных, где утилита записи исчезает, когда ее ключ больше не достижим любым потоком.
IdentityHashMap
основанное на идентификационных данных Map
реализация, основанная на хэш-таблице. Этот class полезен для сохраняющих топологию преобразований графа объектов, таков как сериализация или глубокое копирование. Чтобы выполнить такие преобразования, Вы должны поддержать основанную на идентификационных данных "таблицу узла", которая отслеживает, из которых были уже замечены объекты. Основанные на идентификационных данных карты также используются, чтобы поддержать отображения объекта к метаинформации в динамических отладчиках и подобных системах. Наконец, основанные на идентификационных данных карты полезны в срыве "атакам имитации", которые являются результатом преднамеренно извращенного equals
методы, потому что IdentityHashMap
никогда не вызывает equals
метод на его ключах. Дополнительное преимущество этой реализации - то, что это быстро.
java.util.concurrent
ConcurrentMap
Map
с атомарным putIfAbsent
, remove
, и replace
методы, и ConcurrentHashMap
ConcurrentHashMap
очень параллельная, высокоэффективная реализация, поддержанная хэш-таблицей. Эта реализация никогда не блокирует, выполняя извлечения и позволяет клиенту выбирать уровень параллелизма для обновлений. Это предназначается как понижение замены для Hashtable
: в дополнение к реализации ConcurrentMap
, это поддерживает все методы наследства, специфические для Hashtable
. Снова, если Вы не нуждаетесь в операциях наследства, делать все возможное управлять этим с ConcurrentMap
интерфейс.