java - arrayList.contains 不调用重写的 equals

标签 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() > 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/

相关文章:

javascript - 循环遍历对象数组中的每个属性

php - PHP 中对象和类的区别?

javascript - 创建对象后如何在变量上使用 get 运算符?

出现错误的Java代码

java - 制作可添加到非索引位置的列表的最佳方法是什么

java - Android KeyStore 加密和解密数据

java - 抽象方法的标准可见性

java - 如何在 Robotium for Android Studio 中测试 AlertDialog 项目单击

java - 尝试在 Java 中获取 ArrayList 的输出

java - 该功能与 JTable 模型配合使用是否正常?