2012-05-01 2 views
1

Я читал это много раз, я просто хотел уточнить.Концепция реализации HashMap

HashMap считается массивом арраистов.

Можем ли мы сказать, что размер массива является размер ковша для HashMap

Примечание: Я просто хочу, чтобы сделать одну поправку:

1) Количество ковшей эквивалентно размеру массива 2) Bucket размер - размер Arraylist.

Извините за неудобства. Пожалуйста, дайте мне знать, верны ли эти две точки.

ответ

4

Нет. По вашей аналогии, каждое ведро было бы одним ArrayList, поэтому размер ковша был бы размером ArrayList. Хорошая реализация будет стремиться к тому, чтобы все они были примерно одного размера и были довольно маленькими.

+1

Хотя ведра HashMap больше похожи на LinkedList, чем на ArrayList ... –

0

Количество ведер - это длина массива. Каждое ведро представляет собой ArrayList, и поэтому размер ведра (который может варьироваться от ведра к ковшу) будет длиной этого массива ArrayList. Единственная причина, по которой этот размер должен быть более одного, - это если хэш-код, вычисленный для двух объектов, добавленных в столкновение HashMap (nb, это, вероятно, не совпадает с значением, возвращаемым hashCode(), но производится из него по отношению к емкости/количество ковшей на карте).

0

На самом деле это сложнее, чем это. Например, Java HashMap реализован как массив связанных списков. И в этой модели нет фиксированного размера ковша вообще.

Если вы прочтете литературу, вы обнаружите, что существует множество способов организации хэш-таблицы с различными характеристиками. Wikipedia page on hash tables - хорошее место для начала чтения.

Смежные вопросы