Я понимаю HashSet
на основе HashMap
, так как они очень похожи. Это делает код более гибким и минимизирует усилия по внедрению. Однако одна ссылочная переменная в HashSet Entry
представляется мне ненужной, если класс запрещает элемент null
, поэтому вся запись не имеет смысла. Несмотря на этот факт, Entry
занимает 24 байта памяти/элемента, тогда как один массив с элементами набора будет принимать только 4 байта/элемент, если мои цифры верны. (кроме заголовка массива)Производительность Java HashSet
Если мои аргументы верны, имеют ли преимущества избыточный вес этой производительности?
(если я ошибаюсь, я бы извлечь из него как хорошо)
Единый массив не будет HashSet. Как бы вы имели O (1) contains() с простым массивом? –
@JBNizet линейное зондирование (или вообще открытая адресация) работает только с одним массивом. Мне также интересно, что такое дизайнерское решение, но я не уверен, найдем ли мы автора здесь, чтобы сообщить ;-) –
@JBNizet Вы можете легко реализовать несколько типов хеш-таблиц в массиве, то есть кукушку, линейку и т. Д. ... EDIT: linear не имеет O (1) содержит(), но cuckoo делает –