package com.oneflyingleaf.util;
import java.util.Arrays;
public class ArrayList implements List {
//非线程安全
private int size = 0;
private Object[] elementData = new Object[100];
public void add(Object o){
checkLength(1);
elementData[ size ++] = o;
}
public void add(int index, Object o){
checkBound(index);
if(index != size){
checkLength(1);
}
int temp = index;
//index == size 不移动,直接放
while(index < size){
elementData[ ++ index ] = elementData[index];
}
size ++ ;
elementData[temp] = o;
}
public Object get(int index){
checkBound(index);
return elementData [index];
}
public Object remove(int index){
checkBound(index);
Object ret = elementData[index];
while(index < size){
elementData[index] = elementData[ ++ index];
}
-- size ;
return ret;
}
public int size(){
return size;
}
public Iterator iterator(){
return new ArrayListIterator();
}
/**
* 判断扩容
* @param length
*/
private void checkLength(int length){
if( (size + length) > elementData.length){
//默认扩大一倍
Arrays.copyOf(elementData, elementData.length << 1);
}
}
/**
* 校验是否超出
* @param index
*/
private void checkBound(int index){
if(index < 0 || index > size){
throw new IndexOutOfBoundsException("size : " + size +" , index : " + index);
}
}
private class ArrayListIterator implements Iterator{
private int count = -1;
private ArrayListIterator(){
}
@Override
public boolean hasNext() {
return (count+1) < size?true:false;
}
@Override
public Object next() {
count ++ ;
return elementData[count];
}
}
}