正确使用Map必须保证:
- 作为key的对象必须正确覆写equlas()方法,例如:
String,Integer,Long(已经正确覆盖equals方法) - 作为Key的对象必须正确覆写hashCode()方法
如果两个对象相等,则两个对象的hashCode()必须相等
如果两个对象不相等,则两个对象的hashCode()不需要相等
public class Person {
private String name;
private Integer age;
public Person(String name, Integer age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public Integer getAge() {
return age;
}
//正确覆写hashCode方法
@Override
public int hashCode() {
return Objects.hash(this.name,this.age);
}
//正确覆写equals方法
@Override
public boolean equals(Object obj) {
if(this==obj){
return true;
}
if(obj instanceof Person){
Person p=(Person)obj;
return Objects.equals(this.name,p.name)&&(this.age==p.age);
}
return false;
}
}
public class Main {
public static void main(String[] args) {
Person[] person={new Person("xiaozhang",10),new Person("xiaohong",16),new Person("xiaobai",11)};
List<Person> list= Arrays.asList(person);
Map<Person,Integer> map=new HashMap<>();
for(Person p:list){
map.put(p,p.getAge());
}
System.out.println(map.containsKey(new Person("xiaobai",11)));
System.out.println(map.get(new Person("xiaobai",11)));
}
}