HashCode

今天看了一下HashCode(http://www.cnblogs.com/dolphin0520/p/3681042.html),改变了我以往对HashCode 模糊的概念,下面来简单写一下个人对HashCode 的理解。

HashCode 生来就是为了配合一些散列集合而存在,比如HashSet  HashMap  HashTable。

他的存在,提高了查找和存储效率。

我们都知道,这些散列集合是不允许存在相同值的元素,所以在进行存储之前必须先判断是否已存在该元素,如果用equal() 一个一个的比较,则太耗时,我们得首先了解一下在put(K k,V v)时候的一些操作,首先计算k的hash,然后便利map,检测put 的hash 是否存在,如果不存在,则插入该元素,如果存在则进一步equal判断其value 是否相等,如果不等,则替换为新value。

源代码如下:

public V put(K var1, V var2) {
    if(var1 == null) {
        return this.putForNullKey(var2);
    } else {
        int var3 = hash(var1.hashCode());
        int var4 = indexFor(var3, this.table.length);

        for(HashMap.Entry var5 = this.table[var4]; var5 != null; var5 = var5.next) {
            if(var5.hash == var3) {
                Object var6 = var5.key;
                if(var5.key == var1 || var1.equals(var6)) {
                    Object var7 = var5.value;
                    var5.value = var2;
                    var5.recordAccess(this);
                    return var7;
                }
            }
        }

        ++this.modCount;
        this.addEntry(var3, var1, var2, var4);
        return null;
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值