首页 > 代码库 > hashcode和equals的使用
hashcode和equals的使用
hashcode和equals的使用
一、 说明
hashcode和equals都是用来判断对象是否相等的。
一般来讲equals是给代码编写者判断对象是否相等的,举个例子有个类只有名字属性,重写equals方法认为名字相等则对象相等,那么只要名字相同,对象便是相等的。
hashcode则一般是JDK来判断对象是否相等的,比如在set集合里面判断对象是否重复,就需要判断hashcode和equals是否都相等,只有都相等才认为重复,有一个不等则认为不重复。所以我们重写equals方法的同时一般也要重写hashcode让他们逻辑保持一致。
二、 代码分析
package hashcode;
public class PeopleBean{
private int id;
private Stringname;
@Override
public int hashCode() {
returnid;
}
@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;
returnname.equals(peopleBean.getName());
}
public int getId() {
returnid;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
returnname;
}
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]hashcode和equals的使用