一、StringBuilder、StringBuff
1、StringBuider和StringBuffer的默认长度为16,当append()后的字符长度大于16时,会把之前char[]数组中的字符长度和append()的字符长度相加与16对比,如果大于16,则将数组长度扩容为原来的2n+2倍,如果扩容后的数组长度依然不够,则将相加后的字符长度赋值给数组长度。如果扩容后的数组长度小于0或者大于Integer.MAX_VALUE,则会抛出异常OutOfMemoryError()。
二、ArrayList
1、ArrayList的初始数组默认长度为10,如果add()后超出默认长度,则会进行扩容,扩容为原数组的1.5倍,并将元素赋值到新数组中。如果扩容后的数组长度依然不够,则将相加后的字符长度赋值给数组长度。如果扩容后的数组长度大于Integer.MAX_VALUE - 8,则会抛出异常OutOfMemoryError()。
三、HashMap
1、HashMap的初始数组默认长度为16,HashMap有别于其他扩容方式的机制在于HashMap有一个加载因子(一般默认为0.75),数组长度 * 0.75为阈值,如果put()后超出阈值,则触发扩容机制。扩容为原数组的2倍。