收集框架类的默认容量是多少?

时间:2018-10-03 13:01:04

标签: java

我知道Java中Vector类的默认容量为10,而类似的ArrayList也具有它的默认容量10,但是以下类的默认容量是多少?

  1. 向量
  2. ArrayList
  3. LinkedList
  4. HashMap
  5. LinkedHashMap
  6. ConcurrentHashMap
  7. HashSet
  8. LinkedHashSet
  9. TreeSet

或者还有其他方法可以获取Java中所有收集框架类的默认容量吗?

4 个答案:

答案 0 :(得分:10)

这里没有一个正确的答案,因为这将取决于Java版本。例如,在Java 8中,RFR JDK-7143928 : (coll) Optimize for Empty ArrayList and HashMap默认使ArrayListHashMap为空。

您将必须在JDK中检查每个上述类的默认构造函数。从理论上讲,这在JDK构建(例如Oracle,IBM,Azul ...)之间也可能有所不同,因为默认的ArrayList功能不是Java语言规范的一部分。

答案 1 :(得分:4)

 1. Vector = 10
 2. ArrayList = 10
 3. LinkedList - does not have a capacity
 4. HashMap = 16 (but with the default load factor of 0.75, only 12 can be populated before a resize will happen)
 5. LinkedHashMap = 16 (read above)  
 6. CHM = 16
 7. HashSet = 16 (it's  based on a HashMap)
 8. LinkedHashSet = 16
 9. TreeSet = does not have one

请注意,其中有些是懒惰的,并且所有的版本都会随着发布的变化而变化。

答案 2 :(得分:2)

ArrayList = 10

LinkedList = no intial capacity

HashMap,LinkedHashMap,ConcurrentHashMap,HashSet,LinkedHashSet = 16

TreeSet = empty

答案 3 :(得分:1)

如果查看JDK文件夹,则会看到一个名为src.zip的文件,其中包含API的来源。

例如,以ArrayList的源代码为例,似乎默认容量为10。