1.ArrayList的增长策略,以及它是如何进行扩容的?
ArrayList的增长策略,以及它是如何进行扩容的?
由下面代码可见,ArrayList 的底层是Object类型的数组,并且默认容量是10
private static final int DEFAULT_CAPACITY = 10;
transient Object[] elementData;
ArrayList的构造如下
- 由此可以看出当你输入的容量>0的时候,ArrayList会按照你输入的容量对数组进行创建;
if (initialCapacity > 0) { this.elementData = new Object[initialCapacity]; }
- 当你输入的容量等于0的时候,会自动指向一个空数组;
else if (initialCapacity == 0) { this.elementData = EMPTY_ELEMENTDATA; }
- 当你输入的容量小于0的时候,会抛出一个非法参数异常;
else { throw new IllegalArgumentException("Illegal Capacity: "+ initialCapacity); }
当ArrayList的容量不足的时候就会进行扩容
右移相当于/2,所以当容量不如的时候,会进行1.5倍扩容
int newCapacity = oldCapacity + (oldCapacity >> 1);
努力奔跑,是为了追上曾经被寄予厚望的自己。