equals和hashcode的重写

set集合中可以自动去除掉重复元素也是重写了 equals和hashcode

equals的重写

 

//Employee 是 person 的子类

    // 这个是要求姓名一致,id一致才是同一个职员,进行equals重写比较

 @Override   

 public boolean equals(Object obj){

        if(obj instanceof Employee){

            Employee e=(Employee)obj;

            return super.equals(obj)&&e.getId==id;

        }

        return false;

    }

    //父类使用了instanceof关键字,违反了equals的传递性原则,使用getClass进行类型判断

 @Override   

 public boolean equals(Object obj){

        if(obj!=null && obj.getClass() == this.getClass()){

            Person p=(Person)obj;

            if(p.getName()==null || name==null){

                return false;

            }else{

                return name.equalsIgnoreCase(p.getName());

            }

        }

    }

//重写了equals方法一定要重写hashCode方法

@Override

public int hashCode(){

        return new HashCodeBuilder().append(name).toHashCode();

    }

 原因是HashMap的底层处理机制是以数组的方式保存Map条目(Map Entry)的,这其中的关键是这个数组下标的处理机制:依据传入元素hashCode方法的返回值决定其数组的下标,如果该数组位置上已经有了Map条目,且与传入的键值想的相等则不处理,若不相等则覆盖;如果数组位置没有条目,则插入,并加入到Map条目的链表中。

同理,检查键是否存在也是根据哈希码确定位置的,然后遍历查找键值的。

--(put时键值冲突而使用的链地址法 如何处理 相同的bucket值 而不同的value值,还有get如何区分)

对象元素的hashCode()的返回值:一个对象的哈希码,是由Object类的本地方法生成的,确保没个对象有一个哈希码。

 

//重写toString()方法

public String toString(){

    return String.format("%s.name=%",this.getClass().name);
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值