如何在两个对象的java等式中评估列表

时间:2013-08-17 08:37:13

标签: 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 false;
    if(id == ((Thing)o).getId())
        return true;
    return false;
}
}

是否有必要覆盖hashCode()方法?如果是,如何覆盖它?

3 个答案:

答案 0 :(得分:4)

您应该覆盖hashCodeArrayList类不使用hashCode方法,因此现在不需要 ,但如果您在任何时候使用HashMap类, HashSet或使用hashCode的任何其他集合,该程序将因hashCode and equals are not consistent而中断。

这种情况的hashCode的简单实现可能是:

public int hashCode() {
    return id;
}

答案 1 :(得分:2)

是的,每当你重写equals:

时,必须覆盖hashCode()
  • 如果你没有覆盖HashCode(),则默认行为来自 “Object”类是为每个对象提供一个唯一的hashCode。

  • 这个唯一的hashCode意味着两个不同的对象实例,除非是 你覆盖hashCode()来给出相同的值。

    public int hashCode(){ 返回this.id; }

当你使用Eclipse时,你不必手动编写它。:) 打开java文件的RightCLick - > Source - >生成HashCode()和equals()

答案 2 :(得分:1)

如果你重写equals(),你也应该总是覆盖hashCode()。通过使用Eclipse IDE,您只需为您生成该方法。菜单 - >来源 - >生成hashCode()和equals()