在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()&gt; 0; (肯定)
如果您不知道:包含调用ArrayList.indexOf - &gt;运行每个点并使用equals进行比较如果等于返回num&gt; -1则返回-1,但如果point为null,则indexOf永远不会在contains(point)中达到等于。
您认为可能是什么原因?
答案 0 :(得分:4)
您的equals(Point)
不是您应该创建的那个。
相反,您应该覆盖public boolean equals(Object obj)
。
如果您使用@Override
注释编译器会通知您正在尝试覆盖方法但实际上正在创建重载。