public void add(int index, E element) {
rangeCheckForAdd(index);
modCount++;
final int s;
Object[] elementData;
if ((s = size) == (elementData = this.elementData).length)
elementData = grow();
System.arraycopy(elementData, index,
elementData, index + 1,
s - index);
elementData[index] = element;
size = s + 1;
}
看过源码之后明白了逻辑,可还是不知其所以然:
1、为什么创建本地变量elementData并引用了this.elementData,不直接使用后者呢?
2、这其中复制了几遍原数组?首先grow()反回了size++长度的新数组2,arraycopy方法内复制出了一个暂时的数组3存放elementData再复制进数组2。期间出现了两个新长度的数组,为什么不能
public void add(int index, E element) {
rangeCheckForAdd(index);
modCount++;
final int s;
Object[] NewArray;
if ((s = size) == this.elementData.length)
NewArray = grow();
System.arraycopy(elementData, 0,
NewArray, 0,
index);
elementData[index] = element;
System.arraycopy(elementData, index,
NewArray, index + 1,
s - index);
NewArray[index] = element;
elementData = NewArray;
size = s + 1;
}