Что такое buckets или бакет?

99
21 января 2021, 21:00

Смотрю картинку про хэш‑таблицу и вижу такое слово: buckets. Посоветуйте что это такое и для чего?

Answer 1

Бакетом (англ. bucket — ведро) называют набор элементов хеш‑таблицы с совпадающими/близкими значением хеш‑функции.

Хеш‑функция может принимать большой диапазон значений. Из-за технических ограничений (например, при необходимости экономии памяти) внутренний массив хеш‑таблицы может содержать меньшее количество элементов. Тогда элементы с близкими значениями хеша попадут в одну ячейку.

Ситуацию когда у двух элементов, добавленных в хеш‑таблицу совпадают значение хеша называют коллизией. При этом оба элемента попадают в одну ячейку (корзину/ведро) хеш‑таблицы. Большое число коллизий приводит к замедлению работы хеш‑таблицы.

См. Хеш‑таблица/Разрешение коллизий в Википедии

Картинка

Картинка иллюстрирует конкретный алгоритм разрешения коллизий — открытую адресацию.

Все элементы хеш-таблицы распределяются по 255 ячейкам (число дано для примера, количество ячеек может быть произвольным). У «John Smith» и «Sandra Dee» хеш совпадает. Оба значения размещаются рядом в хеш‑таблице. При использовании этого алгоритма разрешения коллизий это влияет на следующий элемент «Ted Baker», который перемещается в следующую по порядку корзину несмотря на то что имеет уникальный хеш.

Надо сказать, что класс HashMap в Java на данный момент использует другой тип разрешения коллизий, в котором каждый бакет представляет из себя дерево поиска, хотя это деталь реализации, не указанная в JavaDoc. Количество бакетов в HashMap можно задать с помощью capacity и растет по мере необходимости.

READ ALSO
Хранение настроек

Хранение настроек

А где принято хранить настройки подключения к БД (путь, логин, пароль) в Java программах?

137
Создание очереди задач для rest api java

Создание очереди задач для rest api java

есть десктопное приложение для обработки метеорологических данныхВычисления достаточно трудоемкие, для получения результата к примеру...

101
Как я могу получить событие нажатий кнопок обычной гарнитуры и гарнитуры Bluetooth в Android?

Как я могу получить событие нажатий кнопок обычной гарнитуры и гарнитуры Bluetooth в Android?

Как отследить нажатия клавиш на Bluetooth наушниках (гарнитуре) типа: Плей/Пауза, [громкость -], [громкость +], и такой же вопрос касаемо обычных наушников,...

115
Игра на Java не проходит компиляцию

Игра на Java не проходит компиляцию

Такие вот делаРугается на последний кусок кода, запускающий игровой процесс

96