package com.coding.week1; public class ArrayList implements List{ private int size = 0; private Object[] elementData = {}; public void add(Object o){ extendIndex(); elementData[size] = o; size++; } public void add(int index, Object o){ if(index>size){ System.out.println("Exception in thread \""+Thread.currentThread()+"\" java.lang.IndexOutOfBoundsException:Index:"+index+",Size:"+size); return; } int length = elementData.length; if(size==elementData.length){ length=elementData.length+1; } Object[] newElement = new Object[length]; System.arraycopy(elementData, 0, newElement, 0, index); System.arraycopy(elementData, index, newElement,index+1,size-index ); newElement[index]=o; elementData = newElement; size++; } public Object get(int index){ boolean isRange=rangeCheck(index); if(!isRange){ return null; } return elementData[index]; } public Object remove(int index){ boolean isRange=rangeCheck(index); if(!isRange){ return null; } Object rmData = elementData[index]; Object[] newElement = new Object[elementData.length]; System.arraycopy(elementData, 0, newElement, 0, index);; System.arraycopy(elementData, index+1, newElement,index,size-index-1 ); elementData = newElement; size--; return rmData; } public int size(){ return size; } public com.coding.week1.Iterator iterator(){ return new Ito(); } public boolean rangeCheck(int index){ if(index>size-1||index<0){ System.err.println("Exception in thread \""+Thread.currentThread()+"\" java.lang.IndexOutOfBoundsException:Index:"+index+",Size:"+size); return false; } return true; } public void extendIndex(){ Object[] newElement = new Object[elementData.length+1]; System.arraycopy(elementData, 0, newElement, 0, size); elementData = newElement; } public class Ito implements com.coding.week1.Iterator{ int cursor; @Override public boolean hasNext() { if(cursor!=size){ return true; } return false; } @Override public Object next() { Object o=elementData[cursor]; cursor++; return o; } } }