[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-collections-kak-ustroen-hashmap":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":17,"progress":18,"seo":19},474,"kak-ustroen-hashmap",12,"collections","Collections","📚","Как устроен HashMap","`HashMap` — это хэш-таблица, состоящая из массива «корзин» (buckets). Каждая корзина хранит ссылку на связный список (или красно-черное дерево с Java 8) объектов `Node\u003CK,V>`.\n\nАлгоритм добавления элемента (put):\n\n1. Вычисляется `hashCode()` ключа.\n2. Хэш дополнительно перемешивается: `hash = hashCode ^ (hashCode >>> 16)` (для лучшего распределения).\n3. Определяется индекс корзины: `index = hash & (capacity - 1)`.\n4. Если корзина пуста — создается новый Node.\n5. Если корзина занята — обходится список\u002Fдерево в корзине, сравнивая ключи через `equals()`. Если ключ найден — значение заменяется. Если не найден — элемент добавляется в конец.\n6. Если количество элементов в корзине достигает порога `TREEIFY_THRESHOLD` (8) — список преобразуется в красно-черное дерево (при условии, что общая capacity >= 64).\n\nАлгоритм поиска (get): аналогичен шагам 1-3, затем поиск в списке\u002Fдереве корзины через equals().\n\n> **На собеседовании:** объясните полный цикл put: hashCode -> перемешивание -> индекс корзины -> обход списка -> treeification. Упомяните TREEIFY_THRESHOLD = 8.","","middle",[15,16],"основы","jcf",[],null,{"title":20,"description":21,"ogTitle":22,"ogDescription":23,"keywords":24,"schemaAnswer":36,"featuredSnippetReady":37},"Как устроен HashMap внутри — корзины, цепочки, деревья — Gymterview","HashMap: массив корзин + Node (список\u002Fдерево). put: hashCode → перемешивание → индекс → обход цепочки → equals. При 8+ элементах — treeification в красно-чёрное дерево.","Устройство HashMap — Gymterview","Массив корзин + цепочки Node. hashCode → индекс → equals. Java 8: treeification при 8+ элементах.",[25,26,27,28,29,30,31,32,33,34,35],"HashMap","bucket","корзина","Node","hashCode","equals","treeification","красно-чёрное дерево","TREEIFY_THRESHOLD","Java","собеседование","Массив корзин (buckets), каждая хранит связный список\u002Fдерево Node\u003CK,V>. put: hashCode() → перемешивание (hash ^ hash>>>16) → индекс (hash & capacity-1) → обход цепочки с equals(). При 8+ элементах в корзине — treeification в красно-чёрное дерево.",true]