package week01.basic; import java.util.Arrays; public class ArrayList implements List { private int size = 0; private Object[] elementData = new Object[100]; public void add(Object o){ add(size , o); } public void add(int index, Object o){ if(index<0||index > size){ throw new ArrayIndexOutOfBoundsException(index); } size++; if(size>=elementData.length){ expand(); } for(int i = size -1 ;i> index; i--){ elementData[i] = elementData[i-1]; } elementData[index] = o; } public Object get(int index){ if(index<0||index>=size){ throw new ArrayIndexOutOfBoundsException(index); } return elementData[index]; } public Object remove(int index){ if(index<0||index>=size){ throw new ArrayIndexOutOfBoundsException(index); } Object o = elementData[index]; for(int i = index ;i< size - 1; i++){ elementData[i] = elementData[i+1]; } elementData[size - 1] = null; size--; return o; } public int size(){ return size; } public Iterator iterator(){ return new ArrayListIterator(); } class ArrayListIterator implements Iterator{ int count = 0; @Override public boolean hasNext() { count++; if(size<= count){ return false; } return true; } @Override public Object next() { return elementData[count]; } } private void expand(){ elementData = Arrays.copyOf(elementData, elementData.length*2); } }