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]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值