自定义对象做hashmap键
时间: 2023-11-11 15:00:54 浏览: 40
可以将自定义对象作为HashMap的键,但需要满足两个条件:
1. 重写hashCode方法和equals方法,确保相同的对象具有相同的hashCode值和equals比较结果。
2. 自定义对象必须是不可变的,即对象创建后不能再修改其属性值,否则可能导致HashMap无法正确地获取到对应的值。
例如,我们可以定义一个Person类,并将其作为HashMap的键:
```
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Person person = (Person) obj;
return age == person.age && Objects.equals(name, person.name);
}
}
```
然后可以这样使用:
```
Map<Person, String> map = new HashMap<>();
Person p1 = new Person("Tom", 20);
Person p2 = new Person("Tom", 20);
map.put(p1, "value1");
map.put(p2, "value2");
System.out.println(map.size()); // 输出1,因为p1和p2被认为是相同的键
System.out.println(map.get(p1)); // 输出value2,因为p2覆盖了p1的值
```