当前位置: 首页 > 面试题库 >

为什么ArrayList以1.5的速度增长,但Hashmap是2?

左丘季
2023-03-14
问题内容

根据Sun Java
Implementation,在扩展过程中,ArrayList的初始容量增长到3/2,而对于HashMap,扩展速度是原来的两倍。这是什么原因呢?

根据实现,对于HashMap,容量应始终为2的幂。这可能是HashMap行为的原因。但是在那种情况下,问题是,对于HashMap,为什么容量应该始终是2的幂?


问题答案:

增加ArrayList容量的昂贵部分是将后备阵列的内容复制到新的(较大的)阵列中。

对于HashMap,它将创建一个新的后备数组, 并将
所有映射条目放入新数组中。并且,容量越高,发生碰撞的风险越低。这更昂贵,并解释了为什么膨胀系数更高。1.5与2.0的原因?我认为这是“最佳实践”或“良好的权衡”。



 类似资料:
  • 本文向大家介绍HashMap 的长度为什么是2的幂次方?相关面试题,主要包含被问及HashMap 的长度为什么是2的幂次方?时的应答技巧和注意事项,需要的朋友参考一下 为了能让 HashMap 存取高效,尽量较少碰撞,也就是要尽量把数据分配均匀。我们上面也讲到了过了,Hash 值的范围值-2147483648到2147483647,前后加起来大概40亿的映射空间,只要哈希函数映射得比较均匀松散,一

  • 我想知道Hashmap和ArrayList中的搜索元素有什么比较吗?我遇到的情况如下:我将有少量的元素(通常4-6个,最多10个)。我有这样一个元素的整数id,我将得到很多调用,这些调用将使用Id搜索元素并在这个元素上执行一些方法。这看起来是hashmap的一个很好的用例,但是我开始怀疑像ArrayList这样的线性集合在这里会不会更好。例如因为CPU缓存。为了在地图上使用搜索,我需要自动装箱来从

  • 我需要一个“列表”或“地图”,。。。此列表将从另一个ArrayList中添加。当A的参数等于时,对象A被视为等于另一个对象。 我的问题是我只想添加一个列表中不存在的对象。我想知道这两种实施方案之间的区别。使用ArrayList或HashMap 哪种方法可以更快地添加大量对象(超过1000个对象,或更多对象)有更好的模式解决我的问题吗???

  • 我遇到的最后一个问题与这里的链接相同:flexbox项目的宽度被忽略 一切看起来都很好,但在最后一刻,我想更改flex容器的方向,所以我添加了

  • 问题内容: 我们尝试使用以下Java代码从字符串转换为: 我们得到一个长度为22个字节的字节数组,我们不确定此填充来自何处。如何获得长度为20的数组? 问题答案: 亚历山大(Alexander)的答案解释了为什么存在它,但没有解释如何摆脱它。您只需要在编码名称中指定所需的字节序即可:

  • 问题内容: 我需要对象A的“列表”或“地图”。…此列表将从另一个ArrayList中添加。当A的参数相等时,认为对象A等于另一个。 我的问题是我只想添加列表中不存在的对象。我不知道在这两种实现方式之间。使用ArrayList或HashMap 哪一个会增加添加大量对象(超过1000个对象或更多对象)的速度更快?我的问题是否有更好的模式??? 问题答案: 首先,我要大胆地指出这是 两个完全不同的数据结