|
Spec-Zone .ru
спецификации, руководства, описания, API
|
Map реализации группируются в и параллельные реализации специального назначения, общего назначения.
Три, общего назначения Map реализации , и . Если Вы нуждаетесь SortedMap операции или упорядоченный ключом Collection- итерация представления, использовать TreeMap; если Вы хотите максимальную скорость и не заботитесь об итеративном порядке, использовать HashMap; если Вы хотите почтиHashMap производительность и итерация порядка вставки, использовать LinkedHashMap. В этом отношении, ситуация для Map походит Set. Аналогично, все остальное в разделе
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, и . EnumMap, который внутренне реализуется как array, высокоэффективное Map реализация для использования с перечислимыми ключами. Эта реализация комбинирует богатство и безопасность Map интерфейс со скоростью, приближающейся к тому из массива. Если Вы хотите отобразить перечисление на значение, следует всегда использовать EnumMap в предпочтении к массиву.
WeakHashMap реализация Map интерфейс, который хранит только слабые ссылки на его ключи. Хранение только слабые ссылки позволяют паре ключ/значение быть собранной "мусор", когда на ее ключ больше не ссылаются за пределами WeakHashMap. Этот class обеспечивает самый легкий способ использовать питание слабых ссылок. Это полезно для реализации "подобных реестру" структур данных, где утилита записи исчезает, когда ее ключ больше не достижим любым потоком.
IdentityHashMap основанное на идентификационных данных Map реализация, основанная на хэш-таблице. Этот class полезен для сохраняющих топологию преобразований графа объектов, таков как сериализация или глубокое копирование. Чтобы выполнить такие преобразования, Вы должны поддержать основанную на идентификационных данных "таблицу узла", которая отслеживает, из которых были уже замечены объекты. Основанные на идентификационных данных карты также используются, чтобы поддержать отображения объекта к метаинформации в динамических отладчиках и подобных системах. Наконец, основанные на идентификационных данных карты полезны в срыве "атакам имитации", которые являются результатом преднамеренно извращенного equals методы, потому что IdentityHashMap никогда не вызывает equals метод на его ключах. Дополнительное преимущество этой реализации - то, что это быстро.
пакет содержит интерфейс, который расширяется Map с атомарным putIfAbsent, remove, и replace методы, и реализация того интерфейса.
ConcurrentHashMap очень параллельная, высокоэффективная реализация, поддержанная хэш-таблицей. Эта реализация никогда не блокирует, выполняя извлечения и позволяет клиенту выбирать уровень параллелизма для обновлений. Это предназначается как понижение замены для Hashtable: в дополнение к реализации ConcurrentMap, это поддерживает все методы наследства, специфические для Hashtable. Снова, если Вы не нуждаетесь в операциях наследства, делать все возможное управлять этим с ConcurrentMap интерфейс.