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

时间:2012-12-08 08:33:46

标签: java

  

可能重复:
  Why is the default capacity of ArrayList is 10?

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

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

同样HashMap容量是2的幂,但不是ArrayList。这是根据JDK6。

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

根据HashMap源代码中的评论,它必须是2的幂。它在HashMap中是有意义的,因为散列的工作原理。

然而,没有理由说两个人的力量在一个arraylist中是有意义的。如果选择这样一个数字背后有任何原因,那么它本身就会被提及。

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

答案 2 :(得分:0)

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