在 PacMan DFS 问题中,我用以下静态内部类表示每个点
static class Point{
int xp;
int yp;
public Point(int x, int y){
xp = x;
yp = y;
}
public boolean equals(Point p){
return (xp == p.x && yp == p.y) ? true: false;
}
public String toString(){
return xp+" "+yp;
}
}
并将 ArrayList<Point> points = ArrayList<Point>();
中的每个点相加
问题是:如果我执行以下操作 points.contains(new Point(1, 2))
尽管points.size() > 0,但 equals(method) 从未被调用; (当然)
如果您不知道: contains 调用 ArrayList.indexOf --> 运行每个点并使用 equals 进行比较 if equals return num>-1 else return -1,但 indexOf 永远不会达到 contains(point) 中的 equals如果点为空。
您认为可能是什么原因?
最佳答案
您的equals(Point)
不是您应该创建的。
相反,您应该重写public boolean equals(Object obj)
。
如果您使用@Override
注释,编译器会通知您您正在尝试重写方法,但实际上正在创建一个重载方法。
关于java - arrayList.contains 不调用重写的 equals,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38041896/