java - 检查列表是否包含对象 - java

标签 java

我正在编写图像处理程序,但我遇到了列表问题。

我有一个包含积分的列表。

     class Point1{
        private int x;
        private int y;

        Point1(int x,int y)
        {
            this.x = x;
            this.y = y;
        }

       int getX(){ return this.x; }
       int getY() {return this.y; }
    }

    ArrayList<Point1> list = new ArrayList();

现在,我创建新的点,例如 new Point(4,3); 我想检查我的列表中是否有一个点具有相同的坐标。问题是

    list.contains(Object a) 

正在检查我的列表中是否有特定对象。如果我放它就会起作用

    Point1 first = new Point(1,1);  
    list.add(first);
    list.contains(first) // and this is true

但是:

    Point second = new Point(2,2);
    list.add(second);
    list.contains(new Point(2,2)); <- false

如何检查?

最佳答案

您需要重写 Point 类上的 equals 。您的 Point 类必须负责确定另一个 Point 对象是否与当前对象“相等”。 ArrayList 将调用 equals 来确定传入 contains 的对象是否与列表中的任何项目“相等”。

如果您不重写equals,则Point将继承equals from Object ,这将简单地查看它是否是同一个对象。这就是为什么你的第一个代码“有效”,因为你正在重用first。它还解释了为什么您的第二个代码无法“工作”,因为您使用了不同的对象。

此外,如果您覆盖 equals,最好也覆盖 hashCode(反之亦然)。

关于java - 检查列表是否包含对象 - java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23924003/

相关文章:

java - ProcessBuilder导致无法运行程序

Java大列表入口耦合的方法

Java 不支持的类版本错误 8240.8224

java - Spring MVC 验证状态 400

java - 如何使用 Hibernate 选择列?

java - 如何使用 selenium 处理 Phptravels.net 网站上的下拉菜单

java - 是否可以在应用程序周围设置防火墙?

java - Guava 的 TypeToken 文档中的 "free type variable"是什么?

java - 网络爬虫与 Html 解析器

java - 未找到 fragment 类