package org.xukai.common; public class ArrayList implements List { private int size = 0; private static final int DEFAULT_CAPICITY = 10; public ArrayList() { elementData = new Object[DEFAULT_CAPICITY]; } public ArrayList(int size) { elementData = new Object[size]; } private Object[] elementData ; public void add(Object o){ elementData[size] = o; size++; } public void add(int index, Object o){ if (index < 0 || index > size ) { throw new ArrayIndexOutOfBoundsException(); } else { if (isNeedResize(index)) { elementData = grown(elementData, Math.max(elementData.length << 1, index + 1)); } if(index < size){ System.arraycopy(elementData,index,elementData,index+1,size-index); } elementData[index] = o; } size++; } public Object get(int index){ if (index > size-1 || index < 0) { throw new ArrayIndexOutOfBoundsException(); } return elementData[index]; } public Object remove(int index){ if (index > size-1 || index < 0) { throw new ArrayIndexOutOfBoundsException(); } Object result = elementData[index]; size--; System.arraycopy(elementData,index+1,elementData,index,size-index); return result; } public int size(){ return size; } public Iterator iterator(){ return new ArrayListIterator(); } class ArrayListIterator implements Iterator { private int pos = -1; @Override public boolean hasNext() { return pos < size - 1; } @Override public Object next() { pos++; return elementData[pos]; } } public void display(){ System.out.print("["); Iterator iterator = iterator(); while (iterator.hasNext()){ System.out.print(" " + iterator.next()); } System.out.print(" ]"); } private boolean isNeedResize(int index){ return index > elementData.length-1 || size > elementData.length-1; } private Object[] grown(Object[] src,int capacity){ Object[] des = new Object[capacity]; System.arraycopy(elementData,0,des,0,elementData.length); return des; } }