package com.coding.basic;
import java.util.Arrays;
public class ArrayList implements List {
private int size = 0;
private Object[] elementData = new Object[10];
/**
* 扩容
*/
private void expansion() {
if (elementData.length <= size)
elementData = Arrays.copyOf(elementData, elementData.length * 3 / 2 + 1);
}
/**
* 越界
*/
private void outOfBoundsForAdd(int index) {
if (index > size || index < 0)
throw new IndexOutOfBoundsException("数组下标越界");
}
private void outOfBoundsForOther(int index) {
if (index >= size || index < 0)
throw new IndexOutOfBoundsException("数组下标越界");
}
public void add(Object o) {
expansion();
elementData[size++] = o;
}
public void add(int index, Object o) {
outOfBoundsForAdd(index);
expansion();
for (int i = size - 1; i >= index; i--) {
elementData[i + 1] = elementData[i];
}
elementData[index] = o;
size++;
}
public Object get(int index) {
outOfBoundsForOther(index);
return elementData[index];
}
public Object remove(int index) {
outOfBoundsForOther(index);
Object re = elementData[index];
for (int i = index; i < size - 1; i++) {
elementData[i] = elementData[i + 1];
}
elementData[size - 1] = null;
size--;
return re;
}
public int size() {
return size;
}
@Override
public String toString() {
return Arrays.toString(elementData);
}
public Iterator iterator() {
return new ArrayIterator();
}
private class ArrayIterator implements Iterator {
int pos = -1;
@Override
public boolean hasNext() {
return size > ++pos ? true : false;
}
@Override
public Object next() {
return elementData[pos];
}
}
}