import java.util.Arrays;
/**
* Created by peter on 2017/2/22.
*/
public class ArrayList {
private Object[] elements = new Object[10];
private int position = 0;
//添加元素
public void add(Object o){
//首先判断当前数组是否已满
if(position==elements.length){
ensureCapacity();//如果到达则扩展数组长度
}
elements[position++] = o;
}
//在index位置添加元素
public void add(int index,Object o){
if(index<0||index>position){
System.out.println("invalid index");
throw new ArrayIndexOutOfBoundsException();
}
if(position==elements.length){
//如果此时数组已满
ensureCapacity();
}
for(int i=position-1;i>=index;i--){
elements[i+1] = elements[i];//元素向后移动一位
}
elements[index] = o;
position++;//数组元素个数加一
}
//获取index位置的元素
public Object get(int index){
if(index<0||index>position-1){
System.out.println("不合法的index");
throw new ArrayIndexOutOfBoundsException();
}
return elements[index];
}
//删除index位置的元素
public Object remove(int index){
if(index<0||index>position-1){
System.out.println("不合法的index");
throw new ArrayIndexOutOfBoundsException();
}
position--;
return elements[position+1];
}
public int size(){
return position;
}
//返回一个迭代器
public Iterator getIterator(){
return new ArrayListIterator(this);
}
//扩展数组大小,在原来基础上扩展一倍
public void ensureCapacity(){
elements = Arrays.copyOf(elements,elements.length);
}
private class ArrayListIterator implements Iterator{
private ArrayList list;
int position=-1;
public ArrayListIterator(ArrayList list){
this.list=list;
}
@Override
public boolean hasNext() {
if(++position<list.size()){
return true;
}
return false;
}
@Override
public Object next() {
return list.get(position);
}
@Override
public Object remove() {
return list.remove(position);
}
}
}