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);

posted @ 2021-03-26 22:37  迁承_0204  阅读(300)  评论(0编辑  收藏  举报