美文网首页
HashMap 的自定义常量分析

HashMap 的自定义常量分析

作者: 小李不秃 | 来源:发表于2020-03-27 00:54 被阅读0次

    HashMap 系列文章

    前言

    HashMap 中有很多自定义的参数,这些参数都有哪些?作用分别是什么呢?接下来,小李分别为你们进行讲解。

    image

    DEFAULT_INITIAL_CAPACITY

    默认初始化的容量,必须是 2 的 n 次方。默认大小是 16,通过 HashMap 的无参构造函数创建 HashMap,那么 HashMap 的初始化大小就是 DEFAULT_INITIAL_CAPACITY。


    image

    DEFAULT_LOAD_FACTOR

    默认的加载因子,0.75。加载因子有什么作用呢?就是为了计算下面要说的阈值。
    为什么 DEFAULT_LOAD_FACTOR 默认值是 0.75 呢?
    如果值太小,会造成空间的浪费;
    值太大,会造成更多的 hash 冲突;
    所以通过大数据的计算,加载因子为 0.75 的时候是比较折中的做法。


    image

    loadFactor

    hash 表的加载因子,默认就是 DEFAULT_LOAD_FACTOR ,可以通过构造函数进行设置。

    threshold

    阈值,计算方式是 capacity * load factor,如果是默认计算的话,阈值就是 16 * 0.75=12。也就是说,当表的长度大于 12 的时候,就需要调用 resize(),进行扩容的操作。


    image

    entrySet

    缓存 enrySet() 方法的数据,通过 entrySet 可以获取所有的键值对记录,用于循环 HashMap 的键值对。


    image

    MAXIMUM_CAPACITY

    最大的容量 1 <<30,相当于 2^30 ,容量必须是 2 的 n 次方,并且小于等于 MAXIMUM_CAPACITY。如果大于 2^30 ,会赋予 Integer.MAX_VALUE,也就是 2^31 - 1。


    image
    image

    MIN_TREEIFY_CAPACITY

    转换成红黑树需要的最少的表格容量。


    image

    TREEIFY_THRESHOLD

    判断节点数量大于等于 8 的时候,就需要开始进行一个节点转成红黑树的一个操作,就是 treeifyBin方法。但是在转成红黑树的时候还有个条件,就是表的大小应该大于等于 MIN_TREEIFY_CAPACITY,否则会进行 resize() 的操作。


    image image image

    UNTREEIFY_THRESHOLD

    判断节点索引小于等于 6 (节点是从 0 开始的),就会调用 untreeify 方法,返回一个非 TreeNode 的列表,该列表替换非 TreeNode 节点的内容。


    image image

    总结

    本节主要带大家了解了 HashMap 的一些基本常量分析,带大家一起回顾一下:

    • DEFAULT_INITIAL_CAPACITY:默认初识表格的容量,值为 16,必须是 2 的 n 次方;
    • DEFAULT_LOAD_FACTOR:默认加载因子,值为 0.75;
    • loadFactor: 加载因子,可以通过构造函数设置 loadFactory;
    • threshold:阈值,当 hash 表的 size 大于这个值得时候,需要进行 resize 扩容操作,公式是 capacity * load factor;
    • entrySet:缓存 entrySet() 方法的数据,可以对键或者值进行遍历。
    • MIN_TREEIFY_CAPACITY:节点转换成红黑树需要的最少的表格容量,值是 64;
    • TREEIFY_THRESHOLD:判断节点是否需要转成红黑树节点,值是 8;
    • UNTREEIFY_THRESHOLD:判断是否需要调用 untreeify 方法,值是 6。

    下一讲会带来 HashMap 的构造函数讲解。

    相关文章

      网友评论

          本文标题:HashMap 的自定义常量分析

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