我知道Java中Vector
类的默认容量为10,而类似的ArrayList
也具有它的默认容量10,但是以下类的默认容量是多少?
或者还有其他方法可以获取Java中所有收集框架类的默认容量吗?
答案 0 :(得分:10)
这里没有一个正确的答案,因为这将取决于Java版本。例如,在Java 8中,RFR JDK-7143928 : (coll) Optimize for Empty ArrayList and HashMap默认使ArrayList
和HashMap
为空。
您将必须在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。