在 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) {