美文网首页数据结构
HashMap的transfer()方法(jdk1.7)

HashMap的transfer()方法(jdk1.7)

作者: 鉴闻俗说 | 来源:发表于2018-04-19 16:50 被阅读0次

之前读这段代码一直搞不懂transfer()是如何将原table中的节点插入新的table。最近想明白了,觉得有必要记录下来。如有理解不对的地方,欢迎给出建议。

void transfer(Entry[] newTable, boolean rehash) {
    //新table的容量
    int newCapacity = newTable.length;
    //遍历原table
    for (Entry<K,V> e : table) {
        while(null != e) {
            //保存下一次循环的 Entry<K,V>
            Entry<K,V> next = e.next;
            if (rehash) {
                //通过e的key值计算e的hash值
                e.hash = null == e.key ? 0 : hash(e.key);
            }
            //得到e在新table中的插入位置
            int i = indexFor(e.hash, newCapacity);
            //采用链头插入法将e插入i位置,最后得到的链表相对于原table正好是头尾相反的
            e.next = newTable[i];
            newTable[i] = e;
            //下一次循环
            e = next;
        }
    }
}

相关文章

网友评论

    本文标题:HashMap的transfer()方法(jdk1.7)

    本文链接:https://www.haomeiwen.com/subject/kgwwkftx.html