首页 > 代码库 > 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的使用