package week1_0226; import java.util.Arrays; public class ArrayList implements List { private int size = 0; private Object[] elementData = new Object[100]; public void add(Object o){ ensureCapacity(size + 1); elementData[size++] = o; } private void ensureCapacity(int size){ if (size > elementData.length){ grow(); } } private void grow(){ elementData = Arrays.copyOf(elementData, size * 2); } public void add(int index, Object o){ rangeCheckForAdd(index); ensureCapacity(size + 1); System.arraycopy(elementData,index, elementData, index + 1, size - index); elementData[index] = o; size ++; } private void rangeCheckForAdd(int index){ //index = size时不需要报错? if (index > size || index < 0){ throw new IndexOutOfBoundsException(); } } public Object get(int index){ rangeCheck(index); return elementData[index]; } private void rangeCheck(int index){ if (index >= size || index < 0){ throw new IndexOutOfBoundsException(); } } public Object remove(int index){ rangeCheck(index); Object dest = elementData[index]; System.arraycopy(elementData, index +1, elementData, index, size-index-1); size --; return dest; } public int size(){ return size; } public Iterator iterator(){ return new Iterator(){ private int index = 0; public Object next(){ return elementData[index++]; } public boolean hasNext(){ return index >= size; } }; } }