package com.vvv.base;
public class ArrayList implements IList {
private static final int DEFAULT_SIZE = 100;
private int size;
private Object[] data = new Object[DEFAULT_SIZE];
@Override
public void add(Object o) {
if (size > data.length) {
increase();
}
data[size] = o;
size++;
}
@Override
public void add(int index, Object o) {
check(index);
if (index > data.length - 1) {
increase();
}
System.arraycopy(data, index, data, index + 1, size - index);
data[index] = o;
size++;
}
private void check(int index) {
if (index < 0 || index > size)
throw new IndexOutOfBoundsException("index: " + index + ", size: "
+ size);
}
private void increase() {
Object[] newData = new Object[DEFAULT_SIZE * 2];
System.arraycopy(data, 0, newData, 0, size);
data = newData;
}
@Override
public Object get(int index) {
check(index);
return data[index];
}
@Override
public Object remove(int index) {
if (index > 0 && index < size) {
Object d = data[index];
int diff = size - index - 1;
if (diff > 0)
System.arraycopy(data, index + 1, data, index, size - index - 1);
size--;
data[size] = null;
return d;
}
return null;
}
@Override
public int size() {
return this.size;
}
}