package com.coding.basic;
import java.util.Arrays;
import java.lang.IndexOutOfBoundsException;
public class ArrayList implements List {
private int size = 0;
private Object[] elementData = new Object[100];
public void ensure_length(int expect_length) {
if (expect_length > elementData.length) {
elementData = Arrays.copyOf(elementData,elementData.length * 2);
}
}
public void add(Object o){
ensure_length(size + 1);
elementData[size] = o;
size += 1;
}
public void add(int index, Object o){
ensure_length(size + 1);
System.arraycopy(elementData,index,
elementData,index + 1,
size - index + 1);
elementData[index] = o;
size += 1;
}
public Object get(int index) {
if (index > size) {
throw new IndexOutOfBoundsException("index out of bounds");
} else {
return elementData[index];
}
}
public Object remove(int index){
Object oldvalue = elementData[index];
System.arraycopy(elementData,index + 1,elementData,index,size - index - 1);
elementData[--size] = null;
return oldvalue;
}
public int size(){
return size;
}
public Iterator iterator(){
return new Iterator_ip();
}
private class Iterator_ip implements Iterator {
private int index = 0;
@Override
public boolean hasNext() {
return (index + 1) <= size;
}
@Override
public Object next() {
if (index > size) {
// throw new IndexOutOfBoundsException("iterator next out of bounds");
return null;
}
return elementData[index++];
}
}
}