package com.coding.datastructs; import java.util.ConcurrentModificationException; import java.util.NoSuchElementException; public class ArrayList implements List { private int size = 0; private Object[] elementData = null; public ArrayList(){ size=0; elementData=new Object[10]; } public void add(Object o){ size(); elementData=grow(elementData,1); elementData[size] = o; } public void add(int index, Object o){ size(); if (index >size || index < 0||index == size) throw new IndexOutOfBoundsException( "Index: "+index+", Size: "+size); Object temp = elementData; elementData=grow(elementData,1); // Increments modCount!! System.arraycopy(temp, index, elementData, index + 1, size - index); elementData[index] = o; } public Object get(int index){ size(); if (index > size || index < 0 ||index == size) throw new IndexOutOfBoundsException( "Index: "+index+", Size: "+size); return elementData[index]; } public Object remove(int index){ size(); if (index > size || index < 0 ||index == size) throw new IndexOutOfBoundsException( "Index: "+index+", Size: "+size); Object tempData = elementData[index]; System.arraycopy(elementData, index+1, elementData, index, size - index); return tempData; } public int size(){ for(int i=0;i<elementData.length;i++){ if(null==elementData[i]){ size=i; break; } } return size; } public static Object[] grow(Object[] src,int size){ Object[] target = new Object[src.length+size]; System.arraycopy(src, 0, target, 0, src.length); return target; } public Iterator iterator(){ return new Itera(); } private class Itera implements Iterator{ int cursor; int lastRet = -1; public boolean hasNext() { size(); // TODO Auto-generated method stub return cursor!=size; } public Object next() { // TODO Auto-generated method stub int i = cursor; if (i >= size) throw new NoSuchElementException(); Object[] elementData = ArrayList.this.elementData; if (i >= elementData.length) throw new ConcurrentModificationException(); cursor = i + 1; return elementData[lastRet = i]; } } }