A HashSet
вычисляет хеш-код элемента, когда он добавляется в набор.Он хранит это таким образом, который позволяет очень эффективно находить все элементы с одинаковым хеш-кодом.
Затем, когда вы вызываете contains()
, ему просто нужно вычислить хеш-код значения, которое вы ищите и найдите все элементы в наборе с одинаковым хеш-кодом.Может быть несколько элементов, поскольку хеш-коды не являются уникальными, но, вероятно, будет гораздо меньше элементов с совпадающими хеш-кодами, чем элементов в самом наборе.Каждый соответствующий элемент затем проверяется с помощью equals
, пока не будет найдено совпадение или у нас не останется кандидатов.
РЕДАКТИРОВАТЬ: Чтобы ответить на вторую часть, которую я как-то пропустил при первом чтении,не сможет найти элемент снова.Вы не должны изменять элемент, используемый в качестве ключа в хэш-таблице или элемент в хэш-наборе, любым способом, влияющим на равенство, иначе вы в основном сломаете вещи.