В Java у меня есть класс, который представляет точку с int-координатами
public class Point {
int x = -1;
int y = -1;
public Point (int xNew, int yNew) {
x = xNew; y = yNew;
}
public boolean equals (Object o) {
// no need for (o instanceof Point) by design
return x == ((Point)o).x && y == ((Point)o).y;
}
}
Я использую объекты класса Point
в качестве ключей в HashMap
и как элементы в HashSet
.
Какой лучший кандидат для функции hashCode
? Я бы сделал его двойным, так что левая часть равна x, а правая часть - y, например:
x = 4, y = 12
, то hashCode
возвращает 4.12
. Но по реализации он не может быть двойным, только int.
Это не вариант:
public int hashCode() {
// no need to check for exception parseInt since x and y are valid by design
return Integer.parseInt(Integer.toString(x) + Integer.toString(y));
}
поскольку значения x
и y
могут быть слишком длинными, так что вместе они не будут преобразованы.