在列表中查找元素时,equals 是否适用于自身?
Does equals apply on itself when looking an element in a list?
我有一个带有位置值 (x, y) 的对象列表。当我询问此列表的对象是否等于当前对象时,函数 return 在与此列表中的自身进行比较时是否为真?
基本上:
foreach(MyObject o : list){
foreach(MyObject o2 : list){
if(o.equals(o2))
doSomething();
}
}
@Override
public boolean equals(Object obj)
{
if(obj instanceof MyObject)
{
MyObject tmp = (MyObject)obj;
return this.getPosition().equals(tmp.getPosition());
}
return false;
}
如果您希望循环在将元素与自身进行比较时避免返回误报,您可以添加条件:
for (MyObject o : list){
for (MyObject o2 : list){
if (o != o2 && o.equals(o2))
doSomething();
}
}
这将确保只有两个彼此相等的不同实例(这意味着 o
和 o2
不引用同一个对象)会触发 doSomething()
。
我有一个带有位置值 (x, y) 的对象列表。当我询问此列表的对象是否等于当前对象时,函数 return 在与此列表中的自身进行比较时是否为真?
基本上:
foreach(MyObject o : list){
foreach(MyObject o2 : list){
if(o.equals(o2))
doSomething();
}
}
@Override
public boolean equals(Object obj)
{
if(obj instanceof MyObject)
{
MyObject tmp = (MyObject)obj;
return this.getPosition().equals(tmp.getPosition());
}
return false;
}
如果您希望循环在将元素与自身进行比较时避免返回误报,您可以添加条件:
for (MyObject o : list){
for (MyObject o2 : list){
if (o != o2 && o.equals(o2))
doSomething();
}
}
这将确保只有两个彼此相等的不同实例(这意味着 o
和 o2
不引用同一个对象)会触发 doSomething()
。