На чём основан HashMap, что из себя представляют бакеты?
Здраствуйте, вопрос вроде простой, но внятный ответ найти не смог. И так: из коллекций Java я усвоил, что они основываются либо на массивах, либо на взаимоссылках. Всё понятно. Про HM везде объяснение начинается с "вот есть бакеты/корзины"..."которые хранят пару ключ-значение"..."вот есть несколько бакетов"... и т.д. Что из себя представляет бакет (объект с полями К-З, массив, лист?)? Как хранятся эти бакеты (Массив бакетов, лист бакетов?)? Вот в общем и весь вопрос. Дальше про механизм работы мне всё понятно. Спасибо!
Ответы (2 шт):
Всё разобрался, бакеты - это ячейки в обычном массиве которые представляют собой линклисты(с переходом в дерево при определенных условиях). Т.е. хэшмап, упрощённо, массив линклистов.
- Да, правильно, массив бакетов
- Но в бакетах не LinkedList, а односвязанный список, в котором есть ссылки только на next node
- Односвязанный список меняется на красно-черное бинарное дерево при достижении количества его элементов 8 (TREEIFY_THRESHOLD = 8) и обратно при уменьшении кол-ва элементов до 6 (UNTREEIFY_THRESHOLD = 6)