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 одновременно. Эта реализация оптимизирована для минимизации блокировок.