package com.coding.basic;
import java.util.Arrays;
public class ArrayList implements List {
private int size = 0;
private Object[] elementData = new Object[100];
public void add(Object o){
//容量检查
checkCapacity(size + 1);
elementData[size++] = o;
}
//对elementData数组进行容量检查
private void checkCapacity(int minSize) {
//取得当前数组的长度
int elementDataLength = elementData.length;
//如果最小长度大于当前数组的长度,则进行扩容
if (minSize > elementDataLength) {
//ArrayList类扩容的长度是原来数组长度的1.5倍+1,此处参考ArrayList的长度进行扩容
int newSize = (elementDataLength * 3) / 2 + 1;
//如果扩张后的长度还是比最小需要的长度小,则取需要的长度
if (newSize < minSize) {
newSize = minSize;
}
//进行数据的拷贝
elementData = Arrays.copyOf(elementData, newSize);
}
}
public void add(int index, Object o){
//对容量进行检查
checkCapacity(size + 1);
//对数组进行复制,将指定索引位置空出
System.arraycopy(elementData, index, elementData, index + 1, size - index);
elementData[index] = o;
size++;
}
public Object get(int index){
return elementData[index];
}
public Object remove(int index){
if (index > size) {
throw new IllegalArgumentException("参数不对");
}
//size - index
Object o = elementData[index];
int moverNum = size - index - 1;
if (moverNum > 0) {
System.arraycopy(elementData, index+1, elementData, index, moverNum);
}
//将数组最后一个元素置为null
elementData[--size] = null;
return o;
}
public int size(){
return size;
}
public Iterator iterator(){
return null;
}
}