• JAVA7-HashMap 对transfer容量扩容代码的理解


    注: 默认前面代码已经完全理解,且重新计算的hash全部位于同一个位置。

        void transfer(java.util.HashMap.Entry[] newTable, boolean rehash) {
            //1.扩容后的容量
            int newCapacity = newTable.length;
            //2.遍历旧table
            for (java.util.HashMap.Entry<K,V> e : table) {
                //3.当Entry不为null进入二层循环
                while(null != e) {
                    //4.获取当前entry的下一个节点
                    java.util.HashMap.Entry<K,V> next = e.next;
                    //5.计算当前key的hash
                    if (rehash) {
                        e.hash = null == e.key ? 0 : hash(e.key);
                    }
                    //6.根据hash计算元素存储的下标
                    int i = indexFor(e.hash, newCapacity);
                    //7.将新table当前位置的Entry对象复制给e的next属性,在这里完成新数组的头插法
                    e.next = newTable[i];
                    //8.新table的entry节点=当前的entry
                    newTable[i] = e;
                    //9.将e.next属性赋值给e继续循环
                    e = next;
                }
            }
        }

    1.java.util.HashMap.Entry<K,V> next = e.next;

    2.e.next = newTable[i];

     3.newTable[i] = e;

     4.e=next

     5.第一轮循环结束,第二轮重复2-4完成正向遍历,反向插入,逆向插入

     

     java7 HashMap地表最强解析参考:https://blog.csdn.net/carson_ho/article/details/79373026

  • 相关阅读:
    WebService
    jdbc访问数据库
    ssm文件配置
    ssh文件配置
    配置数据源的三种方式和sql心跳的配置
    SQL in与exists
    套接字
    oracle 方向及资料
    ORACLE恢复数据
    SQL时间戳的使用
  • 原文地址:https://www.cnblogs.com/xyzxy/p/14299264.html
Copyright © 2020-2023  润新知