Map2 Flashcards
Описание ConcurrentHashMap
Потокобезопасная реализация Map для работы в многопоточных приложениях.
Под капотом ConcurrentHashMap
Делит данные на несколько сегментов (начиная с Java 8 используется CAS и локальные замки для каждого бакета).
Коллизии и конкуренция в ConcurrentHashMap
Благодаря сегментации и локальному блокированию достигается высокая скорость при многопоточном доступе.
Время доступа ConcurrentHashMap
В среднем O(1) но зависит от числа потоков и количества сегментов.
Особенности ConcurrentHashMap
Не допускает null в качестве ключей и значений.
Описание WeakHashMap
Реализует Map которая хранит ‘слабые ссылки’ на ключи что позволяет автоматически удалять пары ‘ключ-значение’ при сборке мусора если ключ больше не используется.
Под капотом WeakHashMap
Ключи хранятся с использованием слабых ссылок (weak references) что позволяет сборщику мусора удалять ключи при отсутствии других сильных ссылок.
Особенности WeakHashMap
Используется для кэширования где важно освобождать память когда объекты больше не нужны.
Описание IdentityHashMap
Реализует Map которая сравнивает ключи по ссылкам (оператор ==) а не по методу equals().
Под капотом IdentityHashMap
Использует массив для хранения пар ‘ключ-значение’ что отличается от стандартного хеширования.
Особенности IdentityHashMap
Не используется для общих задач где сравнение по значению а не по ссылке является критически важным.
Когда использовать HashMap
Когда нужен быстрый доступ к данным и не важен порядок элементов. Подходит для большинства случаев если нет требований к поточной безопасности или упорядоченности.
Когда использовать LinkedHashMap
Если важно сохранить порядок вставки (например при итерации) или для реализации LRU-кэша (Least Recently Used) с использованием метода removeEldestEntry().
Когда использовать TreeMap
Если необходимо поддерживать порядок ключей например при сортировке по ключам в ‘натуральном порядке’ или при использовании пользовательского компаратора.
Когда использовать ConcurrentHashMap
В многопоточных средах где несколько потоков могут обращаться к Map одновременно. Эта реализация оптимизирована для минимизации блокировок.
Когда использовать WeakHashMap
Для кэшей где можно освобождать память когда ключи больше не используются.
Когда использовать IdentityHashMap
Для специальных случаев где важно сравнение по ссылкам (например при работе с объектами которые представляют уникальные идентификаторы).
Null ключи и значения
Не все реализации Map поддерживают null ключи и значения. Например TreeMap и ConcurrentHashMap не допускают null ключей.
Хеширование и коллизии
HashMap и его производные используют хеширование для распределения ключей по бакетам но разные реализации по-разному решают проблему коллизий.
Потокобезопасность
Стандартные реализации Map такие как HashMap и LinkedHashMap не потокобезопасны. Для многопоточных приложений рекомендуется использовать ConcurrentHashMap или синхронизацию.
Сортировка и порядок
Только TreeMap и LinkedHashMap обеспечивают порядок в то время как HashMap и ConcurrentHashMap не гарантируют его.