import java.util.Iterator;
import java.util.NoSuchElementException;
public class ArrayList<T> implements Iterable<T>{
private static final int CAPACITY = 5;
private int size;
private T [] items;
public ArrayList(){doClear();}
public void clear(){
doClear();
}
private void doClear(){
this.size=0;ensureCapacity(CAPACITY);
}
public int size(){
return size;
}
public boolean isEmpty(){
return size==0;
}
public void trimToSize(){
ensureCapacity(size());
}
public T get( int a){
return items[a];
}
public T set(int a,T b){
T old = items[a];
items[a]=b;
return old;
}
public void ensureCapacity(int newCapacity){
if(newCapacity<size){
return ;
}
T []old =items;
items=(T[]) new Object[newCapacity];
for(int i=0;i<size();i++){
items[i]=old[i];
}
}
public boolean add(T a){
add(size(),a);
return true;
}
public void add(int a,T b){
if(items.length==size())
ensureCapacity(size()*2-1);
for(int i=size;i>a;i--){
items[i]=items[i-1];
}
items[a]=b;
size++;
}
public T remove(int a){
T removedItem=items[a];
for(int i=a;i<size()-1;i++){
items[i]=items[i+1];
}
size--;
return removedItem;
}
@Override
public Iterator<T> iterator() {
// TODO Auto-generated method stub
return new ArrayListIterator();
}
private class ArrayListIterator implements Iterator<T>{
private int current =0;
@Override
public boolean hasNext() {
// TODO Auto-generated method stub
return current<size();
}
@Override
public T next() {
// TODO Auto-generated method stub
if(!hasNext())
throw new NoSuchElementException();
return items[current++];
}
public void remove(){
ArrayList.this.remove(--current);
}
}
}