为什么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
用于比较中使用的任何R组分。
通过visible here add
方法添加任何元素总是打印false。println
在equals
方法内部不起作用。将==
运算符更改为equals
没有任何区别。这里怎么了?
您测试
list.contains(e)
其中CCD_ 6是CCD_。因此,列表为列表中的每个元素调用RComponent.equals(Object)
其总是返回CCD_ 9。
好的,我只需要覆盖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;
}
};