-1

可能重复:
为什么ArrayList的默认容量是10?

为什么默认初始容量ArrayListHashMap不相等?

  • 默认初始容量ArrayList:10
  • 默认初始容量HashMap:16

容量也是HashMap2 的幂,但不是ArrayList。这是根据JDK6。

4

3 回答 3

2

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

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

你只能猜测,除非 Josh Bloch 进来并解释为什么在设计集合框架时选择这些数字。

于 2012-12-08T08:45:08.930 回答
1

根据 HashMap 源代码中的注释,它必须是 2 的幂。由于散列的工作方式,它在 HashMap 中是有意义的。

但是,没有理由说明 2 的幂在数组列表中有意义。如果选择这样一个数字背后有任何原因,那么来源本身就会提到它。

恕我直言,它只是一个任意数字,足够大以避免频繁调整大小(更好的性能),并且足够小不会在未使用的容量上浪费内存。

于 2012-12-08T08:45:36.727 回答
0

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

于 2012-12-08T08:45:19.923 回答