【如何提高Java代码质量:频繁插入和删除时使用LinkedList 】
2013-09-28 09:36
633 查看
一、分析
前面有文章分析了列表的表里方式,也就是“读”的操作。本文将介绍表的“写”操作:即插入、删除、修改动作。
二、场景
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是一个本地方法,效率非常高,但频繁的插入,每次后面的元素都需要拷贝一遍,效率变低了,特别是在头位置插入元素时。
前面有文章分析了列表的表里方式,也就是“读”的操作。本文将介绍表的“写”操作:即插入、删除、修改动作。
二、场景
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是一个本地方法,效率非常高,但频繁的插入,每次后面的元素都需要拷贝一遍,效率变低了,特别是在头位置插入元素时。
相关文章推荐
- [改善Java代码]频繁插入和删除时使用LinkedList
- 提高你的Java代码质量吧:频繁插入和删除时使用LinkedList
- [编写高质量代码:改善java程序的151个建议]建议68 频繁插入和删除时使用LinkedList
- [编写高质量代码:改善java程序的151个建议]建议68 频繁插入和删除时使用LinkedList
- [改善Java代码]频繁插入和删除时使用LinkedList
- 提高你的Java代码质量吧:推荐在复杂字符串操作中使用正则表达式 .
- 提高Java代码质量的Eclipse插件之Checkstyle的使用详解
- 提高你的Java代码质量吧:如果有必要,使用变长数组吧
- 提高你的Java代码质量吧:使用构造函数协助描述枚举项
- List<Map<String,Object>>如何使用Java代码遍历以获取String,Object的值
- 提高Java代码质量的Eclipse插件之Checkstyle的使用详解
- 提高Java代码质量的Eclipse插件之Checkstyle的使用详解
- 提高你的Java代码质量吧:推荐在复杂字符串操作中使用正则表达式
- 提高你的Java代码质量吧:强烈建议使用UTF编码
- 提高Java代码质量的Eclipse插件之Checkstyle的使用详解
- 提高Java代码质量的Eclipse插件之Checkstyle的使用详解
- Java学习之为什么说LinkedList的插入和删除性能比ArrayList好,而ArrayList的查询更好?
- 提高你的Java代码质量吧:推荐使用String直接量赋值
- 提高Java代码质量的Eclipse插件之Checkstyle的使用详解
- 提高你的Java代码质量吧:多使用异常,把性能问题放一边