package com.java.gsl;
import java.util.Arrays;
import java.util.ConcurrentModificationException;
import java.util.NoSuchElementException;
public class ArrayList implements List {
private Object[] elementData = new Object[100];
private int size = elementData.length;
public void add(Object o){
checkLength(size+1);
elementData[size++] = o;
}
public void add(int index, Object o){
if(index < 0 || index > size){
System.out.println("输入有误");
return;
}
System.arraycopy(elementData, index, elementData, index+1, size-index);
elementData[index] = o;
size++;
}
public Object get(int index){
if(index > size) {
System.out.println("出界");
return null;
}
return elementData[index];
}
public Object remove(int index){
if(index < 0 || index > size){
System.out.println("输入有误");
return null;
}
Object o = elementData[index];
System.arraycopy(elementData, index+1, elementData, index, size-index-1);
elementData[size--] = null;
return o;
}
public int size(){
return elementData.length;
}
//判断是否越界 如果越界添加长度
public void checkLength(int l){
int oldSize = elementData.length;
if(l > oldSize){ //大于原来的长度创建新的数组
elementData = Arrays.copyOf(elementData, l+100);
}
}
public Iterator iterator(){
return new Iterator(){
int cursor;
public boolean hasNext() {
return cursor != size ;
}
public Object next() {
int i = cursor;
if (i >= size)
throw new NoSuchElementException();
Object[] elementData_ = elementData;
if (i >= elementData_.length)
throw new ConcurrentModificationException();
cursor = i + 1;
return elementData_[i];
}
};
}
}