package com.coding.basic; import java.util.Arrays; import java.util.ConcurrentModificationException; import java.util.NoSuchElementException; public class ArrayList implements List { private int size = 0; private Object[] elementData = new Object[5]; public void add(Object o) { add(size(),o); //size++; } public void add(int index, Object o) { if (size+1 > elementData.length) { Object[] newelementData = new Object[elementData.length * 2]; System.arraycopy(elementData,0,newelementData,0,elementData.length); System.arraycopy(newelementData,index,newelementData,index+1,newelementData.length-index-1); newelementData[index] = o; elementData = newelementData; newelementData = null; size = size + 1; // Arrays.copyOf() } else { System.arraycopy(elementData,index,elementData,index+1,elementData.length-index-1); elementData[index] = o; size=size+1; } } public Object get(int index) { return elementData[index]; } public Object remove(int index) { System.arraycopy(elementData,index+1,elementData,index,size-2); return elementData; } public int size() { return size; } public Iterator iterator() { return new Iterator() { int cuindex = 0; int lastRet = -1; @Override public boolean hasNext() { return cuindex != size; } @Override public Object next() { int i = cuindex; if (i>=size){ throw new NoSuchElementException(); } if (i >= elementData.length) throw new ConcurrentModificationException(); cuindex = i + 1; return elementData[lastRet=i]; } }; } }