java中如何计算两个对象相等的列表

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

我有一个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 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; }

当您使用Eclipse时,不必手动编写此代码。:)
右键单击打开的java文件-->源-->生成HashCode()和equals()

您可以演示如何使用
contains
方法吗?是的,当您重写其中一个时,您应该始终重写
equals
hashcode
。重写hashcode是一种很好的做法,但对您的情况没有帮助。要覆盖它,只需
返回id
..
dblist
是List,我有一个名为
nlo
的Thing对象
if(dblist.contains(nlo)){//do something}
Post一个SSCCE重现问题。nlo是变量的名称吗?它可以包含任何id的对象。