ArrayList底层是用数组实现的存储。 特点:查询效率高,增删效率低,线程不安全。我们一般使用它
ArrayList的扩容本质上是新建新的大数组,将久数组拷贝过去
remove, add操作也是差不多的原理
public void remove(int index){
checkRange(index);
int moveNum = elementData.length - index - 1;
if(moveNum != 0){
System.arraycopy(elementData, index + 1, elementData, index, moveNum);
}
elementData[size - 1] = null;
size--;
}
remove的代码
public void add(int index, E element){
checkCapacity();//检查并扩容代码
System.arraycopy(elementData, index - 1, elementData, index, elementData.length - index);
elementData[index] = element;
size++;
}
add的代码
private void checkCapacity(){
if(size == elementData.length){
Object[] tmpElementData = new Object[elementData.length*2];
System.arraycopy(elementData, 0, tmpElementData, 0, elementData.length);
elementData = tmpElementData;
}
}
检查并扩容