参考博文:
java集合的扩容机制_这个名字先用着的博客-CSDN博客
# ArrayList
可随着元素的增长而自动扩容,正常扩容的话,每次扩容到原来的 1.5倍。
# ArrayList 和Vector扩容机制总结:
ArrayList 和Vector,底层都是Object数组,
默认加载因子都是:1(元素满了才扩展容量).
默认容量都是:10(但是ArrayList 在jdk1.8时默认为空,当添加元素时,才初始化为10个容量。)
ArrayList:新容量为原容量的 1.5倍,Vector:新容量为原容量的 2倍.
# HashSet和HashMap扩容机制总结:
HashSet和HashMap都是默认初始容量是16(jdk1.7的),但是jdk1.8做了优化,初始容量为0,第一次存元素的时候才扩容为16,
加载因子是:0.75,
扩容为原来的:2倍。
# Hashtable
默认初始容量 :11。
扩容加载因子 :0.75(当超出默认长度(int)(11*0.75)=8时,扩容为 oldx2+1。新容量为原容量的2倍+1. 【int newCapacity = (oldCapacity << 1) + 1;】
# StringBuilder和StringBuffer
初始容量都是:16 ,程序猿尽量手动设置初始值。以避免多次扩容所带来的性能问题。
默认数组容量扩充为原数组容量的 2倍+2。
# 没有扩容机制:
LinkedList:没有扩容机制,因为其底层是双向链表结构
LinkedHashSet,TreeSet没有数组的扩容机制。