Что важно знать
- Индекс бакета из хеша ключа; коллизии — список, при длине больше 8 — красно-чёрное дерево.
- Расширение вдвое при заполнении на 75%.
HashSet— обёртка надHashMap.LinkedHashMapхранит порядок вставки или доступа — основа LRU.
Бакеты, коллизии, treeify, resize, порядок обхода и LRU-кэш.
HashSet — обёртка над HashMap.LinkedHashMap хранит порядок вставки или доступа — основа LRU.Практика. Объяснить на листке, что происходит при put в HashMap с коллизией и при расширении.
Практика. Реализовать LRU-кэш на LinkedHashMap и с нуля на хеш-таблице и двусвязном списке.
HashSet — без порядка, операции O(1); LinkedHashSet — помнит порядок вставки, O(1); TreeSet — отсортирован (красно-чёрное дерево), O(log n) и навигация: first, ceiling, subSet.
Равные по equals объекты обязаны иметь равный hashCode; обратное не требуется — коллизии нормальны. Иначе HashMap и HashSet ищут в другой корзине и не находят равный объект: до…
По hashCode ключа вычисляется индекс корзины в массиве, внутри корзины ключи сравниваются через equals.
HashMap — не потокобезопасна, допускает один null-ключ и null-значения. Hashtable — устаревшая, все методы synchronized, null запрещён. ConcurrentHashMap — потокобезопасная с…
Предсказуемый порядок обхода — по умолчанию в порядке вставки — поверх той же хеш-таблицы.
Коллизии кладутся в один bucket; HashMap ищет нужный ключ через equals, а длинную цепочку (≥8 при таблице ≥64) превращает в красно-чёрное дерево.
Таблица бакетов, перемешивание хеша и индекс, превращение цепочки в дерево, ресайз и load factor, контракт ключа.
Почему Set построен поверх Map, три реализации и их гарантии порядка, роль equals/hashCode.
Порядок вставки против порядка доступа, связанный список поверх HashMap и реализация LRU через removeEldestEntry.
На живом собеседовании sotto слышит вопрос интервьюера и показывает короткий ответ и план. Оставьте контакт — пришлём доступ и промокод.