package hw1;
//import java.util.ArrayList;
import java.util.Iterator;
//import java.util.List;
import com.sun.xml.internal.ws.api.pipe.ThrowableContainerPropertySet;
public class ArrayListImpl implements List {
private int size = 0;
private Object[] elementData = new Object[100];
public void add(Object o){
//size++;
try{
if (size < elementData.length) {
elementData[size] = o;
} else {
elementData = grow(elementData, elementData.length);
elementData[size] = o;
}
size++;
} catch (IndexOutOfBoundsException e) {
System.out.println("The added index is out of bound");
}
}
public void add(int index, Object o){
if (index < 0) {
throw new IndexOutOfBoundsException("Index cannot be less than 0");
}
while (index >= elementData.length) {
elementData = grow(elementData, elementData.length);
}
if (index >= size) {
elementData[index] = o;
size++;
} else {
if (size + 1 >= elementData.length) {
elementData = grow(elementData, elementData.length);
}
for (int i = size-1; i >= index;i--) {
elementData[i+1] = elementData[i];
}
elementData[index] = o;
size++;
}
}
public Object get(int index){
if (index >= size ||index < 0) {
throw new IndexOutOfBoundsException("Index entered is out of bounds");
} else {
return elementData[index];
}
}
public Object remove(int index){
if (index >= size ||index < 0) {
throw new IndexOutOfBoundsException("Index entered is out of bounds");
} else {
Object result = elementData[index];
for (int i = index; i < size - 1; i++) {
elementData[i] = elementData[i+1];
}
elementData[size - 1] = 0;
size--;
return result;
}
}
public int size(){
return size;
}
public Iterator iterator(){
return null;
}
private Object[] grow (Object[] src, int increase) {
Object[] target = new Object[src.length + increase];
System.arraycopy(src, 0, target, 0, src.length);
return target;
}
}