Java ArrayList不使用overriden equals(Object o)方法进行比较



为什么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。printlnequals方法内部不起作用。将==运算符更改为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;
    }
};

最新更新