StringBuffer、ArrayList和HashMap扩容机制

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之后)

你可能感兴趣的:(java,开发语言)