有关hash和equals的解释

这个问题网上已经泛滥了,我把haspMap的put方法源码记下来,不用再争论了以后

由于java里的hashSet底层是用hashMap来实现的,所以只看hashMap的源码就OK了

 

           
public Object put(Object obj, Object obj1)
            {
/* 370*/        if(obj == null)
/* 371*/            return putForNullKey(obj1);
/* 372*/        int i = hash(obj.hashCode());
/* 373*/        int j = indexFor(i, table.length);
/* 374*/        for(Entry entry = table[j]; entry != null; entry = entry.next)
                {
                    Object obj2;
/* 376*/            if(entry.hash == i && ((obj2 = entry.key) == obj || obj.equals(obj2)))//先取hashCode值找位置,在做后续的==和equals判断
                    {
/* 377*/                Object obj3 = entry.value;
/* 378*/                entry.value = obj1;
/* 379*/                entry.recordAccess(this);
/* 380*/                return obj3;
                    }
                }

/* 384*/        modCount++;
/* 385*/        addEntry(i, obj, obj1, j);
/* 386*/        return null;
            }

 

void addEntry(int i, Object obj, Object obj1, int j)
            {
/* 752*/        Entry entry = table[j];
/* 753*/        table[j] = new Entry(i, obj, obj1, entry);
/* 754*/        if(size++ >= threshold)
/* 755*/            resize(2 * table.length);
            }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值