По умолчанию объекты в Java равны, только если экземпляры одинаковы (когда вы говорите, new Pair()
вы создаете новый экземпляр!).
Мы можем переопределить это поведение, переопределив equals()
метод вашего Point
класса.Вот так:
public class Point {
private final x;
private final y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
private static boolean isPoint(Object o) {
return o != null && o instanceof Point;
}
private boolean coordsEqual(Point p) {
return getX() == p.getX() && getY() == p.getY();
}
public boolean equals(Object o) {
return isPoint(o) && coordsEqual((Point) o); //is o is a point? Does it have equal coords?
}
Теперь Point.equals()
вернет true, если наши координаты совпадают, а объект по умолчанию соответствует поведению.Поскольку Collection.contains()
использует метод equals()
для проверки на равенство, ваш код будет вести себя как положено.