当前位置: 首页 > 知识库问答 >
问题:

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

程飞星
2023-03-14

为什么ArrayList的包含(对象o)不运行我的重写等于(对象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

    对于比较中使用的任何Rc组件。

    通过visible hereadd方法添加任何元素都会打印为false。没有printlnequals方法中起作用。将=运算符更改为等于并没有任何区别。这里怎么了?

  • 共有2个答案

    宗波涛
    2023-03-14

    好的,我唯一要做的就是重写ArrayList的index Of方法,如下所示:

    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;
        }
    };
    
    公羊子真
    2023-03-14

    你测试

    list.contains(e)
    

    e是一个RComponent。因此,列表为列表中总是返回false的每个元素调用RComponent.equals(Object)

     类似资料:
    • 问题内容: 如何覆盖对象类中的equals方法? 即我有 我想将参数obj转换为Person类型,但是如果执行(Person)obj,它将无法正常工作。 问题答案: 您可以将其强制转换为方法,只需使用的实例确保其类型正确

    • 我正在尝试创建一个有理数类并覆盖等于和哈希代码方法。但是我的等号在明显不正确的情况下又回来了,即分子和分母不同。知道是什么原因造成的吗?

    • 本文向大家介绍若对一个类不重写,它的equals()方法是如何比较的?相关面试题,主要包含被问及若对一个类不重写,它的equals()方法是如何比较的?时的应答技巧和注意事项,需要的朋友参考一下 考点:基础 比较是对象的地址。

    • 这是来自与hashCode一起使用的旧版本代码并等于,但我正在尝试让新版本使用它。我认为原因是因为在旧版本中我覆盖了 equals 和 hashCode,但在新版本中我似乎无法做到这一点,因为我不再比较对象,而是比较数组(这是猜测)。因此,当前版本不会拾取重复项。它说没有重复项,但这是不正确的。 以下是检测重复项的旧版本的哈希代码和等于。 这是当前版本。 在搜索方法中是确定重复项的地方。这是旧的代

    • 本文向大家介绍hashCode 与 equals ?为什么重写equals时必须重写hashCode方法?相关面试题,主要包含被问及hashCode 与 equals ?为什么重写equals时必须重写hashCode方法?时的应答技巧和注意事项,需要的朋友参考一下 面试官可能会问你:“你重写过 hashcode 和 equals 么,为什么重写equals时必须重写hashCode方法?” ha

    • 为什么在实现Comparator接口时不需要重写equals()方法?comparator中的equals()既不是静态的,也不是默认的。 在同一行中,我还想问,当Comparator有两个抽象方法compare()和equals()时,它是如何作为一个函数接口的?