首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java HashSet 存放自訂物件時 equals 與 hashCode 契約錯誤導致重複

     編輯:程式設計綜合問答

程式碼中定義 Person 類別並覆寫 equals() 與 hashCode(),但 equals() 實作錯誤:

public boolean equals(Object o) {
// ...
return this.equals(((Person) o).getName()); // 錯誤:遞迴呼叫自身
}

正確寫法應比較名稱字串:

return this.getName().equals(((Person) o).getName());

此外,hashCode() 回傳常數 1 雖合法(相同物件 hashCode 必相同),但會導致所有物件落入同一個桶,效能降級。建議結合名稱與年齡計算雜湊碼。

修正後,HashSet 即能正確判斷物件相等,避免重複存入。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved