我正在编写图像处理程序,但我遇到了列表问题。
我有一个包含积分的列表。
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/