package com.dataStructure;
public class ArrayList implements List {
private int size = 0;
private Object[] elementData ;
private final static int DefaultSize = 10;
public ArrayList(){ this(DefaultSize); }
public ArrayList(int capacity){
if(capacity<0)
throw new IllegalArgumentException();
elementData = new Object[capacity];
}
public void add(Object o){
if(size+1 == elementData.length)
resizeCapacity();
elementData[size++] = o;
}
private void resizeCapacity(){
Object[] newDatas = new Object[size*2+1];
System.arraycopy(elementData,0,newDatas,0,size);
elementData = newDatas;
}
private void rangeCheck(int index){
if(index<0 || index > size-1)
throw new IllegalArgumentException();
}
public void add(int index, Object o){
rangeCheck(index);
//bug size++;
System.arraycopy(elementData,index,elementData,index+1,size-index);
elementData[index] = o;
size++;
}
public Object get(int index){
rangeCheck(index);
return elementData[index];
}
public Object remove(int index){
rangeCheck(index);
Object oldElement = elementData[index];
System.arraycopy(elementData,index+1,elementData,index,size-index-1);
elementData[--size]= null;
return oldElement;
}
public int size(){
return size;
}
public boolean isEmpty(){ return size==0; }
public Iterator iterator(){
return new ArrayListIterator();
}
private class ArrayListIterator implements Iterator{
private int pos = 0;
@Override
public boolean hasNext() {
return pos<size;
}
@Override
public Object next() {
if(pos>size)
throw new IllegalArgumentException();
return elementData[pos++];
}
}
}