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