40. Реализация hashCode
для класса Point
#
Условие задачи:
📌 Реализовать метод hashCode()
для класса Point
с полями int x
и int y
. Объяснить, что возвращает hashCode()
.
Код:
public class Point {
private int x;
private int y;
// конструкторы, геттеры/сеттеры
@Override
public int hashCode() {
// TODO: ваша реализация
}
}
Спойлеры к решению
Подсказки
💡 Для смешивания полей используйте простое умножение на простое число (часто 31).
💡 Начальная величина результата может быть, например, 17
или x
.
💡 Формула:
int result = 17;
result = 31 * result + x;
result = 31 * result + y;
return result;
💡 Можно воспользоваться утилитой Objects.hash(x, y)
для краткости, но лучше понять классическое решение.
Решение
import java.util.Objects;
public class Point {
private int x;
private int y;
// Конструктор, геттеры/сеттеры omitted for brevity
@Override
public int hashCode() {
int result = 17; // начальное произвольное ненулевое значение
result = 31 * result + x; // учитываем поле x
result = 31 * result + y; // учитываем поле y
return result;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Point)) return false;
Point other = (Point) o;
return this.x == other.x && this.y == other.y;
}
}