[英]How to evaluate list in java equality of two object
我有一個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
和equals
中斷不一致 。
對於這種情況,hashCode的簡單實現可以是:
public int hashCode() {
return id;
}
是的,每當你重寫equals時,必須覆蓋hashCode():
如果不重寫HashCode(),則“Object”類的默認行為是為每個對象提供唯一的hashCode。
這個唯一的hashCode意味着兩個不同的對象實例,除非
你重寫hashCode()來給出相同的值。
public int hashCode(){return this.id; }
當你使用Eclipse時,你不必手動編寫這個。:)打開java文件的RightCLick - > Source - > Generate HashCode()和equals()
如果你重寫equals(),你也應該總是覆蓋hashCode()。 通過使用Eclipse IDE,您只需為您生成該方法。 菜單 - >源 - >生成hashCode()和equals()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.