• JDK1.7的HashMap源码解读


    JDK1.7的HashMap

      首先是一些属性

       DEFAULT_INITIAL_CAPACITY:初始化容量,代码中为1 << 4 ,即为16。(为什么要这样写呢?)

       MAXIMUM_CAPACITY:最大容量,代码中卫1 << 30 ,即为2的30次幂。

        30次幂的原因是:改属性为int类型,int类型最大为4个字节,共32个二进制位,理论上可以向左移动31次,即31次幂,但是由于第一位应为标识符号的正负位,所以最大为30次幂。选择int而不选择long和byte是为了性能的折中考虑。

       DEFAULT_LOAD_FACTOR:默认加载因子,0.75

       EMPTY_TABLE:一个空表(暂时没发现有什么用)

       table:相比于EMPTY_TABLE多了transient,不用序列化

       size:hashmap的大小

       threshold:当hashmap的size大于该值时,就会进行扩容处理。大小为capacity * load factor

       loadFactor:装载因子

       modCount:用于记录hashmap的修改次数。put和get方法,以及迭代器中都会引入该值。由于HashMap不是线程安全的,所以在迭代的时,会将modCount赋值到迭代器的expectedModCount属性中,后进行迭代,如果在迭代的过程中HashMap被其他线程修改了,modCount的数值就会发生变化,这个时候expectedModCount和ModCount不相等,迭代器就会抛出ConcurrentModificationException()异常。

       ALTERNATIVE_HASHING_THRESHOLD_DEFAULT:一个阈值,默认值为Integer.MAX_VALUE,当一个键值对的键是String类型时,且map的容量达到了这个阈值,就启用备用哈希(alternative hashing)。备用哈希可以减少String类型的key计算哈希码(更容易)发生哈希碰撞的发生率。

       内部类Holder:已在JDK1.8中删除,为了方便所有依赖都进行加载

       hashSeed:初始值为0,哈希种子,用于降低key的hash碰撞概率,如果为0则禁用备用哈希算法

      三种构造方法

       public HashMap(int initialCapacity, float loadFactor):指定初始容量及加载因子

       public HashMap(int initialCapacity):指定初始容量,加载因子默认

       public HashMap():加载因子和初始容量都默认

       public HashMap(Map<? extends K, ? extends V> m):根据已有的Map接口创建一个元素相同的HashMap

    //to-do

  • 相关阅读:
    max 关于面数的脚本,这个在帮助里面还有很多的茶壶什么的 还有面数显示颜色什么的, 有需要时 学习下。
    完整的对齐脚本
    拾取可用于鼠标定位。
    amax 这个函数叫我好找啊, 我一生都不会忘了
    Collections > Collection Types > ObjectSet Values max 删除清除选择的路径
    是个视屏网站。
    自动对齐核心已经完成。这个不错。
    自动对齐中的一段代码。
    对齐成功。
    pickObject count:#multiple forceListenerFocus:false 拾取多个的脚本,这个很是有用。
  • 原文地址:https://www.cnblogs.com/the-zym/p/13219848.html
Copyright © 2020-2023  润新知