为什么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。没有println
在equals
方法中起作用。将=
运算符更改为等于
并没有任何区别。这里怎么了?
好的,我唯一要做的就是重写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;
}
};
问题内容: 如何覆盖对象类中的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()时,它是如何作为一个函数接口的?