package week01.datastructure; 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); //size increase,in order to have enough capacity. elementData[size++] = o; //similar to: elementData[size]=o; size++; } private void ensureCapacity(int minCapacity){ if(minCapacity > elementData.length){ grow(minCapacity); } } private void grow(int minCapacity){ int oldCapacity = elementData.length; int newCapacity = oldCapacity + ( oldCapacity >> 1 ); if(newCapacity < minCapacity){ newCapacity = minCapacity; } elementData = Arrays.copyOf(elementData, newCapacity); } public void add(int index, Object o){ if(index < 0 || index > size) throw new IndexOutOfBoundsException("Index:"+index+",Size:"+size); ensureCapacity(size+1); System.arraycopy(elementData, index, elementData, index + 1, size - index); elementData[index] = o; size++; } public Object get(int index){ if(index < 0 || index >= size) throw new IndexOutOfBoundsException("Index:"+index+",Size:"+size); return elementData[index]; } public Object remove(int index){ if(index < 0 || index >= size) throw new IndexOutOfBoundsException("Index:"+index+",Size:"+size); Object data_index = elementData[index]; System.arraycopy(elementData, index + 1, elementData, index, size - index - 1); elementData[size - 1] = null; size--; return data_index; } public int size(){ return size; } public Iterator iterator(){ return new ArrayListIterator(); } private class ArrayListIterator implements Iterator{ private int pos = 0; public boolean hasNext() { return pos < size; } public Object next() { return elementData[pos++]; } } }