zoukankan      html  css  js  c++  java
  • 加载因子

    原文链接:https://blog.csdn.net/NYfor2017/article/details/105454097

    记载因子

    加载因子就是表示Hash表中元素的填满程度。

    加载因子=填入表中的元素个数 / 散列表的长度

    加载因子越大,填满的元素越多,空间利用率越高,但发生冲突的机会变大了;

    加载因子越小,填满的元素越少,冲突发生的机会减小,但空间浪费了更多了,而且还会提高扩容rehash操作的次数。

    冲突的机会越大,说明需要查找的数据还需要通过另一个途径查找,这样查找的成本就越高。因此,必须在“冲突的机会”与“空间利用率”之间,寻找一种平衡与折衷。

    为什么HashMap需要加载因子?

    一般的数据结构,不是查询快就是插入快,HashMap就是一个插入慢、查询快的数据结构。但这种数据结构容易产生两种问题:① 如果空间利用率高,那么经过的哈希算法计算存储位置的时候,会发现很多存储位置已经有数据了(哈希冲突);② 如果为了避免发生哈希冲突,增大数组容量,就会导致空间利用率不高。

    解决冲突有什么方法?

    1. 开放定址法

    2. 再哈希法

    3. 建立一个公共溢出区

    4. 链地址法(拉链法)

    为什么HashMap加载因子一定是0.75?

    HashMap的初始容量大小默认是16,为了减少冲突发生的概率,当HashMap的数组长度到达一个临界值的时候,就会触发扩容,把所有元素rehash之后再放在扩容后的容器中,这是一个相当耗时的操作。

    而这个临界值就是由加载因子和当前容器的容量大小来确定的:

    在理想情况下,使用随机哈希码,在扩容阈值(加载因子)为0.75的情况下,节点出现在频率在Hash桶(表)中遵循参数平均为0.5的泊松分布。

    选择0.75作为默认的加载因子,完全是时间和空间成本上寻求的一种折衷选择。

  • 相关阅读:
    Javascript之内置对象
    Javascript之匿名函数(私有变量)
    Web前端开发修炼之道 (2)
    11.标志寄存器
    10.CALL和RET指令
    Javascript之继承(其他方式)
    Javascript之Function类型
    5.[BX]和Loop指令
    JavaScript之执行环境及作用域
    Javascript之BOM(window对象)
  • 原文地址:https://www.cnblogs.com/malun/p/NYfor2020.html
Copyright © 2011-2022 走看看