package main;
import java.util.Arrays;
import utils.ListUtils;
public class ArrayList implements List {
private Object[] elementData = new Object[10];
private int size;
@Override
public void add(Object o) {
add(size, o);
}
@Override
public void add(int index, Object o) {
// 检查是否越界
ListUtils.CheckIndexInRange(0, size, index);
if (size == elementData.length) {
elementData = Arrays.copyOf(elementData, elementData.length + 10);
}
if (index < size) {
for (int i = size; i > index; i--) {
elementData[i] = elementData[i - 1];
}
}
elementData[index] = o;
size++;
}
@Override
public Object remove(int index) {
ListUtils.CheckIndexInRange(0, size - 1, index);
Object tag = elementData[index];
for (int i = index; i < size - 1; i++) {
elementData[i] = elementData[i + 1];
}
elementData[size - 1] = null;
size--;
return tag;
}
@Override
public Object get(int index) {
ListUtils.CheckIndexInRange(0, size - 1, index);
return elementData[index];
}
@Override
public int size() {
return size;
}
public Iterator iterator() {
return new Iterator() {
private int cursor;
@Override
public boolean hasNext() {
if (size > 0) {
return cursor < size;
} else {
return false;
}
}
@Override
public Object next() {
Object tag = get(cursor);
cursor++;
return tag;
}
};
}
}