Коллекция на основе хеша не нуждается в зацикливании для проверки наличия элементов с одинаковым ключом.
Представьте, что у вас есть 1000 объектов X. В вашем случае вы просматриваете список каждый раз, когда добавляете что-то.
Коллекция на основе хеша вычисляет хеш объекта, просматривает, есть ли другие элементы с таким же хешем, а затем просто нужно проверить, равен ли один из них новому элементу.Если у вас есть хорошая хеш-функция, которая возвращает уникальный хеш для уникальных элементов, вам просто нужно вычислить число.
Конечно, если вы просто скажете: «Я ленив, и я переопределил свой метод hashCode с помощью return1 ", тогда у вас будет то же количество сравнений, что и для сбора хеша.
Пример: представьте, что у вас есть следующий HashSet:
HashSet: [[obj1], [null], [null], [null], [obj2, obj3, obj4]]
Как видите, базовая структура(может быть) следующим образом: массив, содержащий другие структуры данных с фактическими записями.Теперь, если вы поместите obj5 в HashSet, он вызовет obj5.hashCode ().Исходя из этого, он рассчитает внешний индекс этого объекта.Допустим, это 4:
HashSet: [[obj1], [null], [null], [null], [obj2, obj3, obj4]]
^ obj5
Теперь у нас есть три других объекта с таким же индексом.Да, нам нужен цикл, чтобы проверить, равны ли некоторые из них новому obj5, но если у вас есть более крупный HashSet с миллионами записей, сравнение с некоторыми элементами будет намного быстрее, чем сравнение со всеми элементами.В этом преимущество коллекции на основе хеша.