1、StringBuider和StringBuffer的默认长度为16,在添加元素时如果大于16,则将数组长度扩容为原来的2n+2倍
扩容的原理是左移一位(乘2)+2,+2就避免0左移1位还是0这样的问题
底层:char[]数组
2、ArrayList的初始数组默认长度为10,add()后超出默认长度,则会进行扩容,扩容为原数组的1.5倍(需要注意的是,无参情况下的构造,并不是上来就初始化10长度的数组容量,而是空数组,当添加元素到list中,再去初始化长度为10的数组)
底层:数组
3、LinkedList的扩容机制
由于它的底层是⽤双向链表实现的,没有初始化⼤⼩,也没有扩容的机制
底层:链表
4、、HashMap的初始数组默认长度为16,加载因子0.75所以当长度超过16*0.75=12时扩容为原数组的2倍。
5、、HashTable的初始容量为11,扩容大小:HashTable是按照2*oldlength+1 进行扩容;
底层:数组+链表(1.8之前)数组+链表+红黑树(jdk1.8之后)