前言:
自定义类重写equals、hashcode方法;当在使自定义类的实例对象为hashmap的key时,可以获取值;
代码展示:
public class People {
private String name;
private int age;
public People(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
/**
* 重写的hashcode方法
* 如果自定义类中的属性已经重写过hashcode则直接使用即可,然后在int类型的属性直接加在后面即可
*/
@Override
public int hashCode() {
return (name!=null ? name.hashCode() : 1)*31 + age;
}
/**
* 重写的equals方法
*/
@Override
public boolean equals(Object obj) {
//判断是否为同一个对象
if (this == obj) {
return true;
}
//判断此对象是否为People类的实例对象
if (!(obj instanceof People)) {
return false;
}
//判断成员属性值是否相等
return ((People)obj).getName() == getName() && ((People)obj).getAge() == getAge();
}
/**
* 测试
*/
public static void main(String[] args) {
People p1 = new People("lilei",25);
People p2 = new People("lilei",25);
People p3 = new People("lilei1",25);
System.out.println("================测试equals方法=====================");
System.out.println(p1 == p2);
System.out.println(p1.equals(p2));
System.out.println(p1.equals(p3));
System.out.println("================测试hashcode方法===================");
//hashmap中如果自定义类当作key的话,一定要将自定义类中equals、hashcode方法进行重写
Map<People, String> map = new HashMap<People, String>();
map.put(p1, "5");
System.out.println(map.get(p2));
System.out.println(map.get(p3));
}
}