package basicstruct; public class ArrayList implements List{ private int size = 0; private Object[] elementData ; private static final int DEFAULT_CAPACITY = 10; public ArrayList() { elementData=new Object [DEFAULT_CAPACITY]; } public ArrayList(int initialCapacity) { if(initialCapacity>=0){ elementData=new Object[initialCapacity]; }else { throw new IllegalArgumentException("initialCapacity"+ initialCapacity+"不能为负数"); } } public void add(Object o){ ensureCapacity(); elementData[size++] = o; } public void add(int index, Object o){ if(index<0||index>size){ throw new ArrayIndexOutOfBoundsException("index:"+index); } ensureCapacity(); System.arraycopy(elementData, index, elementData, index + 1,size - index); elementData[index] = o; size++; } private void rangeCheck(int index) { if(index<0||index>=size){ throw new ArrayIndexOutOfBoundsException("index:"+index); } } private void ensureCapacity() { if(size == elementData.length) { Object[] newArray = new Object[size * 2 + 1]; System.arraycopy(elementData, 0, newArray, 0, elementData.length); elementData = newArray; } } public Object get(int index){ rangeCheck(index); return elementData[index]; } public Object remove(int index){ rangeCheck(index); Object movedValue = elementData[index]; //被删除元素后的元素数目 int numMoved = size - index - 1; //后面有元素 if (numMoved > 0){ System.arraycopy(elementData, index+1, elementData, index,numMoved); } //恰为最后一个元素 size--; elementData[size] = null; //垃圾回收 return movedValue; } public int size(){ return size; } public Iterator iterator(){ return null; } }