【问题标题】:Map load factor, how map grows地图加载因子,地图如何增长
【发布时间】:2013-11-20 16:54:11
【问题描述】:

根据我的理解和阅读的内容

负载因子是衡量哈希表在其容量自动增加之前允许达到的程度

因此,当负载因子为 .8(80%),地图大小为 10 时,Map 将增长 10,当 8 个元素放入 Map 时。

所以,现在Map 的大小为 20。我怀疑下一个 10 元素空间何时会添加到 Map

  • Map 再次充满80% 时,即在Map 中放入16 个元素。

  • 当18个元素放入Map时。

【问题讨论】:

    标签: java load-factor


    【解决方案1】:

    那将是 16。如果您查看 HashMap 的 java 代码:

    threshold = (int)(newCapacity * loadFactor);
    

    其中新容量是新大小。因此,您示例中的限制为 16。

    【讨论】:

      【解决方案2】:

      负载因子为 80%,即 16 个元素。它将根据其中的元素总数和当时的最大容量来计算调整大小。

      它不会跟踪上次调整大小。

      【讨论】:

        【解决方案3】:

        HashMap 有一个size() 和一个capacity,这是两个不同的东西。容量是哈希表的内部大小,始终是 2 的幂,因此HashMap 的容量不能为 20。大小是用户放入此映射的哈希条目数。

        当你声明 HashMap

        Map map = new HashMap(20)
        

        它的实际容量是32,阈值是24。它的大小为零。

        Map map = new HashMap()
        

        对于这种情况,地图的大小为 0,默认容量为 16。

        阈值

        threshold = (int)(newCapacity * loadFactor) = 32 * 0.8 = 25;
        

        对于负载因子 0.8,它是 25。因此,一旦您的地图达到 25 个条目的大小,它将被调整为包含相同 25 个条目的容量 64。

        【讨论】:

          【解决方案4】:

          每次调整地图大小时,阈值都会重新计算为;

          threshold = (int)(newCapacity * loadFactor);
          

          所以在你的例子中,它将是 16。

          请参考HashMap的来源here

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-04-06
            • 2013-07-25
            • 1970-01-01
            • 1970-01-01
            • 2014-11-02
            • 2020-05-21
            • 2015-04-22
            • 1970-01-01
            相关资源
            最近更新 更多