美文网首页数据结构
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