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 интерфейс.


Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Реализации Списка
Следующая страница: Реализации Очереди