实现ArreyList的底层
思维导图add()方法的实现原理
主要需要知道ArrayList集合就是一个可以自动扩大范围的Object数组!! =.=
import java.util.Arrays;
public class TTList {
//声明一个默认的变量为10;
private int DEFAULT_CAPACITY = 10 ;
//声明一个空的主要数组
private Object TT [];
//声明一个空的对比数组
private Object DEFAULTCAPACITY [] = {};
//设置一个默认的长度为0
private int tTLong = 0;
//声明索引位置
private int size = 0;
/**
* 无参构造方法
*/
public TTList(){
this.TT = DEFAULTCAPACITY;
}
/**
* 添加集合方法
* @return
*/
public Boolean add(Object e){
//判断TT集合是不是第一次添加信息
if(TT == DEFAULTCAPACITY){
//改变默认长度为10
tTLong = DEFAULT_CAPACITY;
}else {
//否则等于当前的添加的集合索引
tTLong = size + 1;
}
//判断默认长度是不是大于TT数组的长度
if(tTLong - TT.length > 0){
//调用扩容方法
grow(tTLong);
}
//在数组中的索引下标赋值传入的参数Object
TT [size ++] = e;
//返回判断是否添加
return true;
}
/**
* 添加数组长度
* @param tTLong
*/
private void grow(int tTLong) {
//旧的数组长度
int oldCapacity = TT.length;
//新的数组长度
int newCapacity = oldCapacity + (oldCapacity >> 1);
//判断新的长度是否大于第一次赋值的长度10
if(newCapacity - tTLong < 0){
newCapacity = tTLong;
}
//将新的长度的数组重新赋值给TT数组
TT = Arrays.copyOf(TT,newCapacity);
}
/**
*指定索引的add()方法
*/
public Boolean add(Object obj, int index){
TT [index] = obj;
return true;
}
/**
* 获取到集合的长度
* @return
*/
public int size(){
return size;
}
/**
* 获取指定索引的值
* @param index
* @return
*/
public Object get(int index){
return TT[index];
}
}
注意
这个实现List集合原理相对来说比较好理解,但是也有不少不足的地方,比如简化代码的同时也降低了一些稳定性,使得使用这种类的容易出一些安全问题,不过可以在需要修改的前提下可以为所欲为的修改。ヾ(•ω•`)