arraylist的扩容原理?
private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE – 8 = 2^31-1-8 ;
Integer.MAX_VALUE = 0x7fffffff = 2^31-1;
- 老的长度等于当前elementData的长度。
- 新数组的长度=原数组的长度+原数组长度>>1,右移1是除以2.
- 若扩容1.5倍后仍不够用,则newCapacity=minCapacity
- 如果newCapacity比MAX_ARRAY_SIZE还大,则调用hugeCapacity方法。
- 老数据拷贝到新数组中。
如果MAX_ARRAY_SIZE达不到要求,则赋值Integer.MAX_VALUE,理论上arraylist的最大容量为Integer.MAX_VALUE