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));
}

如您所见:

对于比较中使用的任何 RComponent。

通过 visible here add 方法添加任何元素总是打印错误。没有 printlnequals 方法中起作用。将 == 运算符更改为 equals 没有任何区别。这里有什么问题?

你测试

list.contains(e)

其中 eRComponent。 所以列表为列表中的每个元素调用 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;
    }
};