Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ArrayList和HashMap的默认初始容量不相等_Java - Fatal编程技术网

Java ArrayList和HashMap的默认初始容量不相等

Java ArrayList和HashMap的默认初始容量不相等,java,Java,可能重复: 为什么ArrayList和HashMap的默认初始容量不相等 阵列列表的默认初始容量:10 HashMap的默认初始容量:16 另外,HashMap容量是2的幂,但不适用于ArrayList。这与JDK6一致。HashMap使用的数组大小必须是2的幂(根据文档)。所以我猜他们选择的初始容量是最低值,至少等于ArrayList的初始容量 这两个数字也可能是根据实际程序的统计数据选择的,以便在性能和内存消耗之间进行最佳权衡 您只能猜测,除非Josh Bloch进来向我们解释为什么在

可能重复:

为什么
ArrayList
HashMap
的默认初始容量不相等

  • 阵列列表的默认初始容量
    :10
  • HashMap的默认初始容量
    :16

另外,
HashMap
容量是2的幂,但不适用于
ArrayList
。这与JDK6一致。

HashMap使用的数组大小必须是2的幂(根据文档)。所以我猜他们选择的初始容量是最低值,至少等于ArrayList的初始容量

这两个数字也可能是根据实际程序的统计数据选择的,以便在性能和内存消耗之间进行最佳权衡


您只能猜测,除非Josh Bloch进来向我们解释为什么在设计collections框架时选择了这些数字。

ArrayList的初始容量取决于JVM实现(即此值没有官方要求)。因此,您可能有10或16,这取决于您使用的JVM。

根据HashMap源代码中的注释,它必须是2的幂。这在HashMap中是有意义的,因为散列是如何工作的

然而,在arraylist中,没有理由认为二的幂有意义。如果选择这样一个数字背后有什么原因的话,那么在资料来源中就会提到这个数字


嗯,这只是一个任意的数字,大到足以避免频繁调整大小(更好的性能),小到足以避免在未使用的容量上浪费内存。

有什么具体的原因可以说明它们应该相等吗?两者都是动态增长的。那么为什么没有相同的呢?