为什么ArrayList
和HashMap
的默认初始容量不相等?
ArrayList
:10 HashMap
的默认初始容量:16 同样HashMap
容量是2的幂,但不是ArrayList
。这是根据JDK6。
答案 0 :(得分:2)
HashMap使用的数组必须具有2的幂(根据文档)。所以我猜他们选择的初始容量是最低值,至少等于ArrayList的初始容量。
这两个数字也可能是根据实际程序的统计数据选择的,以便在性能和内存消耗之间取得最佳权衡。
除非Josh Bloch进来并解释了为什么在设计集合框架时选择了这些数字,否则你只能猜测。
答案 1 :(得分:1)
根据HashMap源代码中的评论,它必须是2的幂。它在HashMap中是有意义的,因为散列的工作原理。
然而,没有理由说两个人的力量在一个arraylist中是有意义的。如果选择这样一个数字背后有任何原因,那么它本身就会被提及。
恕我直言,它只是一个任意数字,大到足以避免频繁调整大小(更好的性能),而且足够小,不会在未使用的容量上浪费内存。
答案 2 :(得分:0)
ArrayList的初始容量取决于JVM实现(即该值没有官方要求)。所以你可能有10或16,这取决于你正在使用的JVM。