package com.coding.basic;
import java.util.Arrays;
public class ArrayList implements List {
private int size = 0;
private Object[] elementData = new Object[3];
public void add(Object o){
ensureCapacity(size + 1);
elementData[size] = o;
size++;
}
public void add(int index, Object o){
if (index > size){
throw new IndexOutOfBoundsException();
}
// 扩容
ensureCapacity(size + 1);
// 移动元素
System.arraycopy(elementData,index,elementData,index + 1 ,size-index);
elementData[index] = o;
size ++ ;
}
private void ensureCapacity(int minCapacity) {
int newLength = Math.max(minCapacity, size * 2);
elementData = Arrays.copyOf(elementData, newLength);
}
public Object get(int index){
checkIndex(index);
return elementData[index];
}
public Object remove(int index){
checkIndex(index);
Object removed = elementData[index];
System.arraycopy(elementData,index + 1,elementData,index,size-1 - index);
size --;
return removed;
}
private void checkIndex(int index) {
if (index > size-1){
throw new IndexOutOfBoundsException();
}
}
public int size(){
return size;
}
public Iterator iterator(){
return new ArrayListIterator();
}
private class ArrayListIterator implements Iterator {
private int position = 0;
@Override
public boolean hasNext() {
return position < size();
}
@Override
public Object next() {
Object o = get(position);
position++ ;
return o;
}
}
}