package com.coding.basic;
public class ArrayList implements List {
private int size = 0;
private Object[] elementData = new Object[100];
public void add(Object o){
if(size<elementData.length)
{elementData[size] = o;
this.size++;}
else{
elementData = grow(elementData,1);
elementData[size] = o;
this.size++;
}
}
public void add(int index, Object o){
if(index<(this.size)&&this.size<elementData.length)
{
for(int i=this.size;i>index;i--){
elementData[i]=elementData[i-1];
}
elementData[index] = o;
this.size++;
}
else if(index<(this.size)&&this.size==elementData.length)
{
elementData = grow(elementData,1);
elementData[index] = o;
this.size++;
}
else{
System.out.println("index/>size����ʧ��");
}
}
public Object get(int index){
if(this.size>0&&index<(this.size))
return elementData[index];
else{
return null;
}
}
public Object remove(int index){
if(this.size>0&&index<(this.size))
{ Object o= elementData[index];
for(int i=index;i<this.size;i++){
elementData[i]=elementData[i+1];
}
this.size--;
return o;
}
else{
return null;
}
}
public int size(){
return this.size;
}
public Iterator iterator(){
return new ArrayListIterator(this);
}
private static Object[] grow (Object[]src,int size){
Object[] target = new Object[src.length+size];
System.arraycopy(src, 0, target, 0, src.length);
return target;
}
private class ArrayListIterator implements Iterator{
private ArrayList arrayList;
private int pos = 0;
public ArrayListIterator(ArrayList arrayList) {
this.arrayList =arrayList;
}
@Override
public boolean hasNext() {
pos++;
if(pos>arrayList.size){
return false;
}else
return true;
}
@Override
public Object next() {
return arrayList.get(pos-1);
}}
}