疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

hashcode和equals的使用


 

 
hashcode和equals的使用
 
一、说明
 
hashcode和equals都是用来判断对象是否相等的。
 
一般来讲equals是给代码编写者判断对象是否相等的,举个例子有个类只有名字属性,重写equals方法认为名字相等则对象相等,那么只要名字相同,对象便是相等的。
 
hashcode则一般是JDK来判断对象是否相等的,比如在set集合里面判断对象是否重复,就需要判断hashcode和equals是否都相等,只有都相等才认为重复,有一个不等则认为不重复。所以我们重写equals方法的同时一般也要重写hashcode让他们逻辑保持一致。
 
二、代码分析
 
package hashcode;
 
public class PeopleBean{
 
private int id;
 
private String name;
 
@Override
 
public int hashCode() {
 
return id;
 
}
 
@Override
 
public boolean equals(Object obj) {
 
if (null == obj){
 
return false;
 
}
 
if (this == obj){
 
return true;
 
}
 
if (obj.getClass() != this.getClass()){
 
return false;
 
}
 
PeopleBeanpeopleBean = (PeopleBean)obj;
 
return name.equals(peopleBean.getName());
 
}
 
public int getId() {
 
return id;
 
}
 
public void setId(int id) {
 
this.id = id;
 
}
 
public String getName() {
 
return name;
 
}
 
public void setName(String name) {
 
this.name = name;
 
}
 
}
 
package hashcode;
 
import java.util.HashSet;
 
import java.util.Set;
 
public class HashCodeTest {
 
public static void main(String[] args) {
 
PeopleBean bean1 = new PeopleBean();
 
bean1.setId(1);
 
bean1.setName("11");
 
PeopleBean bean2 = new PeopleBean();
 
bean2.setId(2);
 
bean2.setName("11");
 
System.out.println(bean1.equals(bean2));
 
Set<PeopleBean> set = new HashSet<PeopleBean>();
 
set.add(bean1);
 
set.add(bean2);
 
System.out.println(set);
 
bean2.setId(1);
 
Set<PeopleBean> set1 = new HashSet<PeopleBean>();
 
set1.add(bean1);
 
set1.add(bean2);
 
System.out.println(set1);
 
}
 
}
 
输出:true
 
[hashcode.PeopleBean@1,hashcode.PeopleBean@2]
 
[hashcode.PeopleBean@1]