В чем будет проблема, если не переопределять метод hashCode()
Некоторые коллекции, такие как HashSet, HashMap или HashTable, используют значение хэш-кода объекта, чтобы узнать, как объект будет храниться в коллекции, и впоследствии хэш-код используется, чтобы помочь найти объект в коллекции. Извлечение хэша участвует:
- Во-первых, в поиске нужного бакета (корзины) с помощью hashCode()
- Во-вторых, в поиске в корзине нужного элемента, используя equals()
Если hashCode() не переопределен, то реализация по умолчанию в классе Object будет использоваться коллекциями. Эта реализация дает разные значения для разных объектов, даже если они равны согласно методу equals().
Пример:
public class Person {
private int id;
private String name;
public Person(int id, String name) {
this.name = name;
this.id = id;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class HashcodeEquals {
public static void main(String[] args) {
Person bob1 = new Person(1, "Bob");
Person bob2 = new Person(1, "Bob");
System.out.println("bob1 hashcode = " + bob1.hashCode());
System.out.println("bob2 hashcode = " + bob2.hashCode());
System.out.println("Проверка равенства bob1 and bob2 = " + bob1.equals(bob2));
}
}
Вывод:
bob1 hashcode = 1852704110
bob2 hashcode = 2032578917
Проверка равенства bob1 and bob2 = false
Читайте также:
Комментарии
Отправить комментарий