程式碼中定義 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 即能正確判斷物件相等,避免重複存入。