Найти тему
DEBAGanov

Java 1236. Если у класса Point{int x, y;} реализовать метод equals(Object that) {(return this.x == that.x && this.y == that.y)}, но сделать

1236. Если у класса Point{int x, y;} реализовать метод equals(Object that) {(return this.x == that.x && this.y == that.y)}, но сделать хэш код в виде int hashCode() {return x;}, то будут ли корректно такие точки помещаться и извлекаться из HashSet?

Если реализовать метод equals(Object that) таким образом: (return this.x == that.x && this.y == that.y) , а метод hashCode() вернуть только одно значение x, то вероятность коллизий в HashSet будет высокой. Это потому, что HashSet использует метод hashCode() для размещения элементов в таблице. При такой реализации две точки (x1, y1) и (x2, y2) будут помещаться в таблицу HashSet в одно и то же место (в одну и ту же ячейку), если их координаты по оси X совпадают:

new Point(1, 2).hashCode() == new Point(1, 5).hashCode() // true

Таким образом, необходимо обеспечить уникальный хэш для каждой точки, чтобы избежать коллизий. Один из способов сделать это - использовать хэш-функцию, которая учитывает обе координаты точки:

public int hashCode() {
return Objects.hash(x, y);
}

Такая реализация гарантирует уникальный хэш для каждой точки и позволит корректно помещать и извлекать точки из HashSet.

1606 вопрос-ответ по Java

Курс Spring Framework

Tелеграмм каналDEBAGanov

Мое резюмеDEBAGanov