package main.week01.data_structure;
import java.util.Arrays;
import main.week01.data_structure.api.Iterator;
import main.week01.data_structure.api.List;
public class ArrayList implements List {
private int size = 0;
private Object[] elementData = new Object[10];
private void ensureCapacity(int input) {
if (input > elementData.length) {
growCapacity();
}
}
private void growCapacity() {
elementData = Arrays.copyOf(elementData, size * 2);
}
private void rangeCheck(int index) {
if (index > size || index < 0) {
throw new IndexOutOfBoundsException();
}
}
public void add(Object o) {
ensureCapacity(size + 1);
elementData[size++] = o;
}
public void add(int index, Object o) {
rangeCheck(index);
ensureCapacity(size + 1);
System.arraycopy(elementData, index, elementData, index + 1, size
- index);
elementData[index] = o;
size++;
}
public Object get(int index) {
rangeCheck(index);
return elementData[index];
}
public Object remove(int index) {
rangeCheck(index);
Object dest = elementData[index];
System.arraycopy(elementData, index + 1, elementData, index, size
- index - 1);
elementData[size---1]=null;//��ֹ�ڴ�й©
return dest;
}
public int size() {
return size;
}
public class ArrayListIterator implements Iterator {
private ArrayList list;
private int position = 0;
private ArrayListIterator() {
}
private ArrayListIterator(ArrayList list) {
this.list = list;
}
@Override
public boolean hasNext() {
return position + 1 <= list.size;
}
@Override
public Object next() {
return list.get(position++);
}
}
public ArrayListIterator iterator() {
return new ArrayListIterator(this);
}
}