package com.coding.basic;
/**
* ArrayList
*
* @author Guang
* @date 2017年3月12日 下午1:55:47
*/
public class ArrayList implements List {
/**
* 数组中元素个数
*/
private int size = 0;
/**
* 数组
*/
private Object[] elementData = new Object[100];
public void add(Object o) {
if (size >= 100 || size < 0) {
throw new IndexOutOfBoundsException("越界.");
}
if (null == o) {
return;
}
elementData[size] = o;
size++;
}
public void add(int index, Object o) {
checkRangeForAdd(index);
if (null == o) {
return;
}
for (int i = size; i > index; i--) {
elementData[i] = elementData[i - 1];
}
elementData[index] = o;
size++;
}
private void checkRangeForAdd(int index) {
if (index < 0 || index > size) {
throw new IndexOutOfBoundsException("越界.");
}
}
private void checkRangeForGet(int index) {
if (index < 0 || index >= size) {
throw new IndexOutOfBoundsException("越界.");
}
}
public Object get(int index) {
checkRangeForGet(index);
return elementData[index];
}
/**
* 移除第index位置的元素,后续元素前移
*/
public Object remove(int index) {
checkRangeForGet(index);
int i = index;
Object o = elementData[index];
for (; i < size - 1; i++) {
elementData[i] = elementData[i + 1];
}
elementData[i] = null;
size--;
return o;
}
public int size() {
return size;
}
public Iterator iterator() {
return new Iterator() {
int index = 0;
@Override
public Object next() {
checkRangeForGet(index);
Object o = elementData[index];
index++;
return o;
}
@Override
public boolean hasNext() {
return index < size && index >= 0;
}
};
}
}