arrayList.contains不会调用覆盖的equals

时间:2016-06-26 18:41:20

标签: java object arraylist

在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)中达到等于。

您认为可能是什么原因?

1 个答案:

答案 0 :(得分:4)

您的equals(Point)不是您应该创建的那个。

相反,您应该覆盖public boolean equals(Object obj)

如果您使用@Override注释编译器会通知您正在尝试覆盖方法但实际上正在创建重载