在 Java 中,可以將自定義對象作為 Map
的 Key,但必須滿足以下條件:
1. 必須正確重寫 hashCode()
和 equals()
方法
- 原因:
Map
(如HashMap
)依賴這兩個方法確定鍵的唯一性和存儲位置。 - 未正確重寫的風險:
- 無法正確查找值:即使兩個對象邏輯上相等,若
hashCode
不同,會被視為不同的 Key。 - 重復 Key:若
equals
未正確實現,邏輯相等的對象可能被同時存入 Map,破壞 Key 的唯一性。
- 無法正確查找值:即使兩個對象邏輯上相等,若
示例代碼
public class Person {private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}@Overridepublic int hashCode() {return Objects.hash(name, age); // 基于所有關鍵字段生成 hash}@Overridepublic boolean equals(Object obj) {