package com.company.code;
import java.util.Arrays;
public class ArrayList<I extends Number> implements List {
private int size = 0;
private Object[] elementData = new Object[100];
public void add(Object o){
if(size+1>elementData.length){
elementData= Arrays.copyOf(elementData,elementData.length/3*2);
}
elementData[size++]=o;
}
public void add(int index, Object o){
if(index<0||index>size){
throw new IndexOutOfBoundsException();
}
if(size+1>elementData.length){
elementData=Arrays.copyOf(elementData,elementData.length/3*2);
}
System.arraycopy(elementData,index,elementData,index+1,size-index);
elementData[index]=o;
size++;
}
public Object get(int index){
if(index<0||index>=size){
throw new IndexOutOfBoundsException();
}
return elementData[index];
}
public Object remove(int index){
Object old=elementData[index];
System.arraycopy(elementData,index+1,elementData,index,size-1-index);
size--;
return old;
}
public int size(){
for(int i=0;i<elementData.length;i++){
if(null==elementData[i]){
size=i;
break;
}
}
return size;
}
public Iterator iterator(){
return new ArrayListIterator();
}
public class ArrayListIterator implements Iterator{
private int currentIndex=0;
@Override
public boolean hasNext() {
return currentIndex<size();
}
@Override
public Object next() {
Object o=get(currentIndex);
currentIndex++;
return o;
}
}
}