package io.renren
import java.util.Arrays
public class ExtArrayList {
// list 底层 采用数组存放
private Object[] elementData
//默认容量大小
private static final int DEFAULT_CAPACITY = 10
//实际arraylist大小
private int size
//初始化容量大小
public ExtArrayList(int initialCapacity){
if(initialCapacity<0){
throw new RuntimeException()
}
elementData = new Object[initialCapacity]
}
public ExtArrayList(){
this(10)
}
public void add(Object object){
if(size == elementData.length){
/* Object[] newObj = new Object[2 * size]
for (int i = 0
newObj[i] = elementData[i]
}
elementData = newObj
//简略的扩容
//elementData = Arrays.copyOf(elementData,size*2)
int oldCapacity = elementData.length
int newCapacity = oldCapacity + (oldCapacity >> 1)
// 如果初始化的集合长度为1 则与运算 算出的结果扩容还是1 会报错,数组越界,则需要以下判断
// size 是记录当前集合的元素个数,在扩容成功的基础上至少是个数+1 不会报错,所以有如下处理
int minCapacity = size + 1
if (newCapacity - minCapacity < 0) {
newCapacity = minCapacity
}
elementData = Arrays.copyOf(elementData,newCapacity)
}
elementData[size++]=object
}
//获取数据
public Object get(int index){
if(index > size){
throw new RuntimeException()
}
return elementData[index]
}
public Object remove(int index){
//判断是否存在
Object o = get(index)
// 计算删除元素后面的长度
int numMoved = elementData.length - index - 1
if(numMoved>0){
System.arraycopy(elementData,index+1,elementData,index,numMoved)
}
elementData[--size] = null
return o
}
}