【问题标题】:arrayList.contains doesn't invoke overrided equalsarrayList.contains 不调用覆盖的等于
【发布时间】:2016-06-26 18:41:19
【问题描述】:

在 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)) equals(method) 从未调用过,尽管 points.size() > 0; (当然)

如果你不知道: contains 调用 ArrayList.indexOf --> 运行每个点并使用 equals 进行比较 if equals return num>-1 else return -1,但 indexOf 永远不会在 contains(point) 中达到 equals如果点为空。

你认为可能是什么原因?

【问题讨论】:

    标签: java object arraylist


    【解决方案1】:

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

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

    如果您使用@Override 注解,编译器会通知您您正在尝试覆盖一个方法,但实际上是在创建一个重载的方法。

    【讨论】:

    • 是的,这是真的。我没注意到!谢谢
    • 我再也不会忘记@Override 注释了。
    猜你喜欢
    • 1970-01-01
    • 2012-02-26
    • 1970-01-01
    • 2013-03-15
    • 2014-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多