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(o!=null){ elementData[size] = o; if(size<100-1){ size++; }else{ Object[] temp = new Object[(size+1)+100]; System.arraycopy(elementData, 0, temp, 0, size); elementData = temp; size++; } } } public void add(int index, Object o){ if(index<elementData.length-1){ if(index<size-1){ //����Ԫ��λ�ô��������ڲ� Object tmp = elementData[index]; //����Ԫ��λ�ú������Ԫ�غ���һλ Object[] temps = new Object[elementData.length+1]; System.arraycopy(elementData, 0, temps, 0, elementData.length); for(int i=temps.length;i>=index;i--){ if(i==index){ temps[index] = tmp; }else{ temps[i]=temps[i-1]; } } elementData = temps; }else if(index>=size-1){ elementData[size] = o; } }else{ //����Ԫ��λ�ô��������ұ߽� Object[] temp = new Object[(size+1)+100]; System.arraycopy(elementData, 0, temp, 0, size); elementData = temp; elementData[index] = o; } size++; } public Object get(int index){ if(index<=elementData.length){ return elementData[index]; }else{ return null; } } public Object remove(int index){ Object rtnObj = null; if(index<=size){ if(index<elementData.length-1){ rtnObj = elementData[index]; for(int i=index;i<size;i++){ elementData[i] = elementData[i+1]; } elementData[size] = null; size--; return rtnObj; }else if(index==elementData.length-1){ rtnObj = elementData[size]; elementData[size] = null; size--; return rtnObj; } } return null; } public int size(){ return this.size; } class ArrayIterator implements Iterator{ private ArrayList array; private int position = 0; public ArrayIterator(ArrayList list){ this.array = list; } @Override public boolean hasNext() { if(array.get(position)!=null){ this.position++; return true; }else return false; } @Override public Object next() { return array.get(position-1); } } public Iterator iterator(){ ArrayIterator aIterator = new ArrayIterator(this); return aIterator; } }