java中如何计算两个对象相等的列表
我有一个arrayList,我想使用contains(Thing o)方法来检查这两个对象的相等性,我重写Thing类中的equals()方法,但当我调用contains方法时,这不起作用! 这是我的东西类:java中如何计算两个对象相等的列表,java,Java,我有一个arrayList,我想使用contains(Thing o)方法来检查这两个对象的相等性,我重写Thing类中的equals()方法,但当我调用contains方法时,这不起作用! 这是我的东西类: public class Thing{ private int id; //getter setter @Override public boolean equals(Object o) { if(!(o instanceof Thing)) return f
public class Thing{
private int id;
//getter setter
@Override
public boolean equals(Object o) {
if(!(o instanceof Thing))
return false;
if(id == ((Thing)o).getId())
return true;
return false;
}
}
是否也需要重写hashCode()方法?如果是,如何覆盖它?您应该覆盖
hashCode
。ArrayList
类不使用hashCode
方法,因此现在不需要该方法,但如果在任何时候您要将类与HashMap
、HashSet
或任何其他使用hashCode
的集合一起使用,则程序将中断,因为
对于这种情况,hashCode的简单实现可以是:
public int hashCode() {
return id;
}
在重写equals()的情况下,也应该始终重写hashCode()。通过使用EclipseIDE,您可以简单地为自己生成这些方法。菜单->源->生成hashCode()和equals()是的,只要您重写equals,就必须重写hashCode():
- 如果不重写HashCode(),则 “Object”类是给每个对象一个唯一的哈希代码
- 除非
您重写hashCode()以提供相同的值 公共int hashCode(){ 返回此.id; }
右键单击打开的java文件-->源-->生成HashCode()和equals()您可以演示如何使用
contains
方法吗?是的,当您重写其中一个时,您应该始终重写equals
和hashcode
。重写hashcode是一种很好的做法,但对您的情况没有帮助。要覆盖它,只需返回id
..dblist
是List,我有一个名为nlo
的Thing对象if(dblist.contains(nlo)){//do something}
Post一个SSCCE重现问题。nlo是变量的名称吗?它可以包含任何id的对象。