今天学习Java的ArrayList,看了底层代码,了解到了ArrayList底层是用数组实现的,并且,在创建一个ArrayList的时候,使用无参构造器
相当于:Object[]={},长度为0的数组
使用有参数的构造器:
所以,如果使用无参的构造器,那么初始的长度为0,
当第一次调用add()方法时,完成Object类型数组的初始化容量,10
首先第一次add(E e)的时候,会去检测容量是否够用calculateCapacity(elementData,minCapacity)
如果确实是{},则会返回DEFAULT_CAPACITY=10,再去执行ensureExplicitCapacity(),去扩充容量。
老的容量+老的容量/2,相当于扩容一半
下面是自己实现的一个动态数组:
总结:
感觉难点在于添加元素和删除元素
当向动态数组中某个位置index添加一个元素的时候,需要挪动后面的元素
for(int i=size-1;i>=index;i--){
data[i+1]=data[i];
}
//当index=2,size=5,则
//int i =5,i>=2,i--
//data[5]=data[4]
删除某个位置的元素index,并返回这个元素的值
E ret = data[index];
for(int i=idex+1;i
data[i-1]=data[i];
}
//index =1,i<5,i++
data[1]=data[2] → =data[1]=56
data[2]=data[3] → data[2] = 89
data[3]=data[4] → data[3]=89
i=index还是i=idex+1是个问题。