ArrayList源代码详解二
ArrayList源代码详解2
对于add(int index,object o);该方法在特定位置插入元素,底层数组的元素都往后面移动一位,代价相当高,同理remove(int index)
对于ArrayList构造方法源代码详解:
public ArrayList(){ this(10);//调用子类带参数的构造方法 } public ArrayList(int initialCapacity){ super(); if(initialCapacity<0){ //抛出异常 } this.elementData=new Object(initialCapacity);//定义一个数组 }
由此可见,如果我们用默认的构造方法构建ArrayList对象,则底层会生成10个元素长度的一个数组
add(E)方法详解:
public boolean add(E e){ ensureCapacity(size+1); elementData[size++]=e; return true; } 将制定的元素追加到list末尾, public void ensureCapacity(int minCapacity){ modCount++; int oldCapacity=elementData.length; if(minCapacity>oldCapacity){ object oldData[]=elementData; int newCapacity=(oldCapacity*3)/2 + 1; if(newCapacity<minCapacity){ newCapacity=minCapacity; } elementData=Arrays.copyof(elementData,newCapacity); } }
由此可以看出,ensureCapacity用于扩展数组本身,如果增加的元素个数超过了10个,则ArrayList底层数组长度为 原数组的长度的1.5倍+1