You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java项目:计算ArrayList与LinkedList中间插入元素的耗时差异

Java ArrayList vs LinkedList 中间插入耗时对比实现方案

嘿,刚好做过类似的性能测试,给你一套完整的实现思路和代码,直接就能用!

核心测试逻辑

要对比两种集合的中间插入耗时,核心就是记录插入操作前后的时间戳,计算差值。这里我们用System.currentTimeMillis()统计毫秒级耗时,如果需要更精确的结果,也可以换成System.nanoTime()(纳秒级)。具体步骤:

  1. 给两个集合各初始化4个元素,这样插入第5个元素到索引1/2就是中间位置
  2. 分别记录插入操作的开始和结束时间
  3. 计算耗时并打印对比结果

完整可运行代码

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"));
    }
}

结果说明与优化建议

  1. 单次测试可能出现耗时为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 + " 毫秒");
    
  2. 理论性能vs实际表现:LinkedList的节点插入本身是O(1)操作,但找到插入位置需要遍历到索引1,这一步是O(n);ArrayList的插入需要移动后续元素,也是O(n)。当集合元素量小时,两者差异不大;但当元素量很大时,ArrayList因内存连续、缓存命中率高,实际运行速度可能反而比LinkedList快——所以一定要用实际测试数据说话,不要只看理论复杂度。

注意事项

  • 测试时尽量关闭其他占用资源的程序,避免环境干扰
  • 如果需要更精确的统计,推荐用System.nanoTime(),最后转换为毫秒(除以1000000)

内容的提问来源于stack exchange,提问作者nick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:06:59