Java ArrayList 没有使用override equals(Object o) 方法进行比较
Java ArrayList does not use overriden equals(Object o) method to compare
为什么 ArrayList 的 contains(Object o) 没有 运行 我重写的 equals(Object o) 方法?考虑这段代码:
private class TargetRC {
public RComponent rc;
public TargetRC(RComponent e) {
rc = e;
}
@Override
public boolean equals(Object o) {
if (o instanceof RComponent)
return o == rc;
else
return o == this;
}
}
private ArrayList<TargetRC> list = new ArrayList<TargetRC>();
public void add(RComponent e) {
list.add(new TargetRC(e));
System.out.println(list.contains(e));
}
如您所见:
对称因为 o == rc 当且仅当 rc == o
自反因为 rc == rc
对于比较中使用的任何 RComponent。
通过 visible here add
方法添加任何元素总是打印错误。没有 println
在 equals
方法中起作用。将 ==
运算符更改为 equals
没有任何区别。这里有什么问题?
你测试
list.contains(e)
其中 e
是 RComponent
。
所以列表为列表中的每个元素调用 RComponent.equals(Object)
总是 returns false
.
好的,我唯一要做的就是重写 ArrayList 的 indexOf 方法,如下所示:
private ArrayList<TargetRC> list = new ArrayList<TargetRC>(){
@Override
public int indexOf(Object o){
for(int i=0; i<size(); ++i){
if(get(i).equals(o)) return i;
}
return -1;
}
};
为什么 ArrayList 的 contains(Object o) 没有 运行 我重写的 equals(Object o) 方法?考虑这段代码:
private class TargetRC {
public RComponent rc;
public TargetRC(RComponent e) {
rc = e;
}
@Override
public boolean equals(Object o) {
if (o instanceof RComponent)
return o == rc;
else
return o == this;
}
}
private ArrayList<TargetRC> list = new ArrayList<TargetRC>();
public void add(RComponent e) {
list.add(new TargetRC(e));
System.out.println(list.contains(e));
}
如您所见:
对称因为 o == rc 当且仅当 rc == o
自反因为 rc == rc
对于比较中使用的任何 RComponent。
通过 visible here add
方法添加任何元素总是打印错误。没有 println
在 equals
方法中起作用。将 ==
运算符更改为 equals
没有任何区别。这里有什么问题?
你测试
list.contains(e)
其中 e
是 RComponent
。
所以列表为列表中的每个元素调用 RComponent.equals(Object)
总是 returns false
.
好的,我唯一要做的就是重写 ArrayList 的 indexOf 方法,如下所示:
private ArrayList<TargetRC> list = new ArrayList<TargetRC>(){
@Override
public int indexOf(Object o){
for(int i=0; i<size(); ++i){
if(get(i).equals(o)) return i;
}
return -1;
}
};