一、分析
前面有文章分析了列表的表里方式,也就是“读”的操作。本文将介绍表的“写”操作:即插入、删除、修改动作。
二、场景
1.插入元素
列表中我们使用最多的是ArrayList,下面看看他的插入(add方法)算法,源代码如下:
[java] public void add(int index,E element){
/*检查下标是否越界,代码不在拷贝*/
//若需要扩容,则增大底层数组的长度
ensureCapacity(size + 1);
//给index下标之后的元素(包括当前元素)的下标加1,空出index位置(将elementData从index起始,复制到index+1的职位
System.arraycopy(elementData,index,elementData,index + 1,size - index);
//赋值index位置元素
elementData[index] = element;
//列表的长度+1
size++;
}
public void add(int index,E element){
/*检查下标是否越界,代码不在拷贝*/
//若需要扩容,则增大底层数组的长度
ensureCapacity(size + 1);
//给index下标之后的元素(包括当前元素)的下标加1,空出index位置(将elementData从index起始,复制到index+1的职位
System.arraycopy(elementData,index,elementData,index + 1,size - index);
//赋值index位置元素
elementData[index] = element;
//列表的长度+1
size++;
}
注意看arraycopy方法,只要是插入一个元素,其后的元素就会向后移动一位,虽然arraycopu是一个本地方法,效率非常高,但频繁的插入,每次后面的元素都需要拷贝一遍,效率变低了,特别是在头位置插入元素时。
本文深入解析ArrayList的插入操作,详细介绍了add方法的实现原理,包括元素的移动过程和底层数组的扩容机制。通过源代码分析,揭示了频繁插入对性能的影响,尤其是在头部插入元素时的效率问题。
305

被折叠的 条评论
为什么被折叠?



