package com.coding.basic; public class ArrayList implements List { private int size = 0; private Object[] elementData = new Object[100]; public void add(Object o) { if(elementData.length == size) { Object[] arrTaget = new Object[size * 2]; System.arraycopy(elementData, 0, arrTaget, 0, size); this.elementData = arrTaget; } elementData[size++] = o; } public void add(int index, Object o){ if(index < 0 || index > size){ throw new IndexOutOfBoundsException("Index out of bound"); } Object[] arrTarget = new Object[size - index]; System.arraycopy(elementData, index, arrTarget, 0, size - index); elementData[index] = o; System.arraycopy(arrTarget, 0, elementData, index + 1, size - index); } public Object get(int index){ return elementData[index]; } public Object remove(int index){ Object retObj = elementData[index]; if(index < 0 || index > size){ throw new IndexOutOfBoundsException("Index out of bound"); } else if(index == size) { elementData[index] = null; } else { System.arraycopy(elementData, index + 1, elementData, index, size - index); } size--; return retObj; } public int size(){ return this.size; } public Iterator iterator(){ return new ArrayListIterator(); } private class ArrayListIterator implements Iterator{ private int cursor = 0; @Override public boolean hasNext() { // TODO Auto-generated method stub return this.cursor != size; } @Override public Object next() { // TODO Auto-generated method stub return elementData[this.cursor++]; } } }