package com.github.orajavac.coding2017.basic;
public class ArrayList implements List,Iterator{
private int size = 0;
private int i=0;
private Object[] elementData = new Object[2];
//SS
public void add(Object o){
size=size();
if (size == elementData.length)
grow(elementData,size);
elementData[size]=o;
}
public void add(int index, Object o){
Object old=elementData[index]; //[3] old value=c
size=size();
size+=1;
if (size>elementData.length)
grow(elementData,size);
Object temp = null;
int len=elementData.length;
for (int i=0;i<len;i++){
if (i==index){
elementData[index]=o;
}else if(i>index){
temp=elementData[i];
elementData[i]=old; //[4]=c
old=temp;
}
}
}
public Object get(int index){
return elementData[index];
}
public Object remove(int index){
if (index==elementData.length-1){ //删除最后一个索引元素里的值
elementData[index]=null;
}else{
elementData[index]=null;
int len=elementData.length;
for (int i=0;i<len;i++){
if (i==index){
elementData[i]=elementData[i+1];
}else if(i>index){
if(i+1!=len){
elementData[i]=elementData[i+1];
}else{ //我们假设数组索引 0-3,那么数组长度是4,3+1==4,elementData[i+1]会报错
elementData[i]=null;
}
}
}
}
return null;
}
public int size(){
size=0;
for (int i=0;i<elementData.length;i++){
if (elementData[i]!=null){
size++;
}
}
return size;
}
public void grow(Object[] elementData,int size){
Object[] target = new Object[size+elementData.length];
System.arraycopy(elementData, 0, target, 0, elementData.length);
this.elementData=target;
}
public Iterator iterator(){
ArrayList l = new ArrayList();
l.elementData=this.elementData;
l.size=this.size();
return l;
}
public boolean hasNext(){
if (i<=size-1){
return true;
}else{
i=0;
}
return false;
}
public Object next(){
Object obj=elementData[i];
i++;
return obj;
}
}