Java项目:计算ArrayList与LinkedList中间插入元素的耗时差异
Java ArrayList vs LinkedList 中间插入耗时对比实现方案
嘿,刚好做过类似的性能测试,给你一套完整的实现思路和代码,直接就能用!
核心测试逻辑
要对比两种集合的中间插入耗时,核心就是记录插入操作前后的时间戳,计算差值。这里我们用System.currentTimeMillis()统计毫秒级耗时,如果需要更精确的结果,也可以换成System.nanoTime()(纳秒级)。具体步骤:
- 给两个集合各初始化4个元素,这样插入第5个元素到索引1/2就是中间位置
- 分别记录插入操作的开始和结束时间
- 计算耗时并打印对比结果
完整可运行代码
import java.util.ArrayList; import java.util.LinkedList; public class CollectionInsertTest { public static void main(String[] args) { // 测试ArrayList中间插入耗时 ArrayList<Object> arrayList = new ArrayList<>(); // 添加前4个元素 for (int i = 0; i < 4; i++) { arrayList.add(new Object()); } long arrayStart = System.currentTimeMillis(); // 插入到索引1的位置(中间位置) arrayList.add(1, new Object()); long arrayEnd = System.currentTimeMillis(); long arrayInsertTime = arrayEnd - arrayStart; // 测试LinkedList中间插入耗时 LinkedList<Object> linkedList = new LinkedList<>(); // 添加前4个元素 for (int i = 0; i < 4; i++) { linkedList.add(new Object()); } long linkStart = System.currentTimeMillis(); // 同样插入到索引1的位置 linkedList.add(1, new Object()); long linkEnd = System.currentTimeMillis(); long linkInsertTime = linkEnd - linkStart; // 打印结果 System.out.println("ArrayList 插入到索引1的耗时:" + arrayInsertTime + " 毫秒"); System.out.println("LinkedList 插入到索引1的耗时:" + linkInsertTime + " 毫秒"); System.out.println("插入速度更快的是:" + (arrayInsertTime < linkInsertTime ? "ArrayList" : "LinkedList")); } }
结果说明与优化建议
- 单次测试可能出现耗时为0的情况:因为插入4个元素后的集合很小,操作耗时极短,毫秒级统计可能捕捉不到。这时候可以把插入操作循环执行多次(比如10000次),计算总耗时再取平均值,结果会更准确:
// 示例:循环10000次ArrayList插入,计算平均耗时 long arrayTotalTime = 0; for (int i = 0; i < 10000; i++) { ArrayList<Object> tempList = new ArrayList<>(); for (int j = 0; j < 4; j++) { tempList.add(new Object()); } long start = System.currentTimeMillis(); tempList.add(1, new Object()); long end = System.currentTimeMillis(); arrayTotalTime += (end - start); } long avgArrayTime = arrayTotalTime / 10000; System.out.println("ArrayList 平均插入耗时:" + avgArrayTime + " 毫秒"); - 理论性能vs实际表现:LinkedList的节点插入本身是O(1)操作,但找到插入位置需要遍历到索引1,这一步是O(n);ArrayList的插入需要移动后续元素,也是O(n)。当集合元素量小时,两者差异不大;但当元素量很大时,ArrayList因内存连续、缓存命中率高,实际运行速度可能反而比LinkedList快——所以一定要用实际测试数据说话,不要只看理论复杂度。
注意事项
- 测试时尽量关闭其他占用资源的程序,避免环境干扰
- 如果需要更精确的统计,推荐用
System.nanoTime(),最后转换为毫秒(除以1000000)
内容的提问来源于stack exchange,提问作者nick
相关产品推荐
相关产品推荐

