为了账号安全,请及时绑定邮箱和手机立即绑定

WeakHashMap在哪里把hash冲突的节点链到链表上的?

WeakHashMap在哪里把hash冲突的节点链到链表上的?

GCT1015 2019-05-19 14:33:46
问题:在阅读java8中WeakHashMap源码时,发现一个问题,put操作在发生hash冲突时,只有替换操作,但是没有新增链表节点的操作,链表节点是什么时候链上去的?java8中的put源码如下:public V put(K key, V value) {    Object k = maskNull(key);    int h = hash(k);    Entry<K,V>[] tab = getTable();    int i = indexFor(h, tab.length);     //这里只是在链表上找到key存在的节点做替换,但是对于key不存在的情况,     //并没有创建新的节点链到原来的链表后面。    for (Entry<K,V> e = tab[i]; e != null; e = e.next) {        if (h == e.hash && eq(k, e.get())) {            V oldValue = e.value;            if (value != oldValue)                e.value = value;            return oldValue;        }        //?????当hash 相同但是key不同不是应该创建新节点链到链表上吗?    }    modCount++;    Entry<K,V> e = tab[i];    tab[i] = new Entry<>(k, value, queue, h, e);    if (++size >= threshold)        resize(tab.length * 2);    return null;}
查看完整描述

2 回答

  • 2 回答
  • 0 关注
  • 431 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信