package com.coding.basic;
import java.util.Arrays;
public class ArrayList implements List {
private int size = 0;
private static final int MIN_EXTEND = 10;
private Object[] elementData = new Object[100];
/**
*
* @Author: yuhe
* @Description: 确保数组的容量
* @param next 要插入的位置
*/
private void ensureCapacity(int capacity) {
if (capacity < elementData.length) {
return;
} else {
int newLength = capacity + MIN_EXTEND;
elementData = Arrays.copyOf(elementData, newLength);
}
}
private void rangeCheckForAdd(int index) {
if (index < 0 || index > size) {
throw new ArrayIndexOutOfBoundsException(index);
}
}
private void rangeCheck(int index) {
if (index < 0 || index >= size) {
throw new ArrayIndexOutOfBoundsException(index);
}
}
public void add(Object o){
ensureCapacity(size+1);
elementData[size++] = o;
}
public void add(int index, Object o){
rangeCheckForAdd(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 ret = elementData[index];
int numToRemove = size-index-1;
if (numToRemove > 0)
System.arraycopy(elementData, index+1, elementData, index, numToRemove);
elementData[size--] = null;
return ret;
}
public int size(){
return size;
}
public Iterator iterator(){
return new Iterator() {
private int index = 0;
@Override
public Object next() {
return elementData[index++];
}
@Override
public boolean hasNext() {
return index < size;
}
};
}
}