У меня есть список объектов, которые мне нужно добавить в HashSet, скажем List<Node> books
. Скажем далее, что никакие две книги не равны в том смысле, что их метод equals
будет возвращать false; скажем, однако, что их метод hashCode
возвращает 1
. Я использую этот крайний случай, чтобы я мог полностью понять, как работает прием. Поэтому мой вопрос таков: будет ли HashSet признавать все мои объекты?Как hashSet допускает элементы
public class Book{
...
@Override
public boolean equals(Book other){
return false;
}
@Override
public int hashCode(){
return 1;
}
}
Напомним, что hashSet не допускает дубликатов.
Мне интересно, потому что по самому имени hashSet использует хэш объекта. Является ли этот хэш случайностью, связанной с хэш-кодом добавляемого объекта?
И да я aware of
Добавляет указанный элемент к этому набору, если он уже не присутствует. Более формально добавляет указанный элемент e к этому набору, если этот набор не содержит элемента e2 такого, что (e == null? E2 == null: e.equals (e2)). Если этот набор уже содержит элемент, вызов оставляет значение без изменений и возвращает false.
Но как хэш-код объекта связан с его хэш-значением в HashSet?
Возможный дубликат [Hashcode и Equals for Hashset] (http://stackoverflow.com/questions/5396939/hashcode-and-equals-for-hashset) – user1717259