package com.rd.p2p.common.util.liuxin;
import java.util.Arrays;
public class ArrayList<E> implements List<E> {
private int size = 0;
private Object[] elementData = new Object[10];
public void add(E o){
if(size >= elementData.length){
elementData = Arrays.copyOf(elementData, elementData.length * 2);
}
elementData[size++] = o;
size++;
}
public void add(int index, E o){
if(index > size){
throw new ArrayIndexOutOfBoundsException("插入索引数不能大于数列总长度 " + index + ">" + size);
}
if(size >= elementData.length){
elementData = Arrays.copyOf(elementData, elementData.length * 2);
}
Object[] tempData = Arrays.copyOfRange(elementData, index, size);
elementData[index] = o;
for(int i = 1; i <= tempData.length; i++){
elementData[i+index] = tempData[i-1];
}
size++;
}
public Object get(int index){
if(index >= size){
throw new ArrayIndexOutOfBoundsException("取出数组索引不能大于等于数组总长度 " + index + ">=" + size);
}
return elementData[index];
}
public Object remove(int index){
if(index >= size){
throw new ArrayIndexOutOfBoundsException("移除索引数不能大于等于数列总长度 " + index + ">=" + size);
}
Object data = get(index);
Object[] tempData = Arrays.copyOfRange(elementData, index+1, size);
for(int i = 0; i < tempData.length; i++){
elementData[index+i] = tempData[i];
}
elementData[size - 1] = null;
size--;
return data;
}
public int size(){
return size;
}
@Override
public String toString() {
for (Object object : elementData) {
System.out.println(object);
}
return null;
}
//迭代器
public Iterator iterator(){
return new Iterator() {
private int index = 0;
@Override
public Object next() {
if(index >= size){
throw new ArrayIndexOutOfBoundsException("取出数组索引不能大于等于数组总长度 " + index + ">=" + size);
}
return get(index++);
}
@Override
public boolean hasNext() {
if(size > index){
return true;
}else{
return false;
}
}
};
}
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3,3);
Iterator in = list.iterator();
while(in.hasNext()){
System.out.println(in.next());
}
}
}