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

问题:在阅读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;

}


GCT1015
浏览 432回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java