跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Javajava算法

ArrayList 与 LinkedList 性能实测:插入、遍历与删除耗时对比

通过本地基准测试对比 ArrayList 与 LinkedList 在追加、索引插入及随机访问场景下的性能差异。结果显示 ArrayList 在尾部追加和随机读取上显著优于 LinkedList,而 LinkedList 在头部插入时表现更佳。实际开发中应根据数据操作频率选择合适的数据结构。

DevOpsTeam发布于 2015/7/5更新于 2026/6/1329 浏览
ArrayList 与 LinkedList 性能实测:插入、遍历与删除耗时对比

ArrayList 与 LinkedList 性能实测

以下测试基于本地环境进行,具体耗时可能因硬件配置而异,仅供参考。

1. 尾部追加 (add(E e))

在频繁向集合末尾添加元素时,ArrayList 通常表现更好。LinkedList 每次增加元素都需要新建一个 Entry 对象并进行多次赋值操作,在频繁的系统调用中会对性能产生一定影响。

package list;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class ListPerformanceTest {
    public static void main(String[] args) {
        testAdd();
    }

    static void testAdd() {
        Object obj = new Object();
        List<Object> al = new ArrayList<>(); // 约 70ms
        List<Object> ll = new LinkedList<>(); // 约 471ms
        long b = System.currentTimeMillis();
        for (int i = 0; i < 5000000; i++) {
            al.add(obj); // 添加到尾端
        }
        long e = System.currentTimeMillis();
        System.out.println(e - b);
    }
}

2. 索引插入 (add(int index, E element))

ArrayList 的此方法在源码层面可以看出,每插入一次都会进行一次数组复制。如果数据插入到尾端则不存在此开销,但大量数据重组会导致性能低下。插入位置越靠前,数组重组开销越大。

相比之下,LinkedList 对于插入到前后中的效率基本一致。虽然它需要搜索节点,但在处理头部插入时优势明显。

    static void testAddIndex() {
        Object obj = new Object();
        List<Object> al = new ArrayList<>(); // 约 1071ms
        List<Object> ll = new LinkedList<>(); // 约 17ms
        long b = System.currentTimeMillis();
        for (int i = 0; i < 100000; i++) {
            ll.add(0, obj); // 添加到头部
        }
        long e = System.currentTimeMillis();
        System.out.println(e - b);
    }

3. 随机访问与遍历 (get(i))

遍历列表主要有三种方式,当数据量达到 100 万级别时差异显著:

  • for (Object o : list)
  • for (Iterator it = list.iterator(); it.hasNext(); )
  • for (int i = 0; i < list.size(); i++)

ArrayList 支持随机访问,时间复杂度为 O(1)。而 LinkedList 不支持随机访问,通过下标获取元素需从头或尾遍历,数据量大时耗时极长。

    static void testQuery() {
        List<String> l = new ArrayList<>();
        for (int i = 0; i < 1000000; i++) {
            l.add(String.valueOf(i));
        }
        long b = System.currentTimeMillis();
        String temp = "";
        for (int i = 0; i < l.size(); i++) {
            temp = l.get(i);
        }
        long e = System.currentTimeMillis();
        System.out.println(e - b);
    }

测试结果参考:

  • ArrayList: 1w 条 2ms,10w 条 5ms,100w 条 10ms
  • LinkedList: 1w 条 94ms,10w 条 13174ms,100w 条 超时

由此可知,在遍历和随机读取数据方面,ArrayList 具有明显的优势。实际开发中应根据具体的业务场景选择合适的数据结构。

目录

  1. ArrayList 与 LinkedList 性能实测
  2. 1. 尾部追加 (add(E e))
  3. 2. 索引插入 (add(int index, E element))
  4. 3. 随机访问与遍历 (get(i))
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Linux/C++多线程编程入门:核心概念与常用函数详解
  • ClawdBot 开发指南:CLI、Webhook 及自定义 Agent 扩展实践
  • 数据结构初阶:时间复杂度与空间复杂度详解
  • Java 核心知识点梳理:修饰符、OOP 与常用 API
  • Python 基础入门:数据存储与运算
  • Streamlit 实战指南:用 Python 快速构建交互式 Web 应用
  • 对比 Copilot 与国产 AI 编程助手:通义灵码、Comate 深度评测
  • Stable Diffusion 3.5 FP8 推理性能解析:显存与速度优化指南
  • 人工智能大模型学习路线:从入门到进阶的完整指南
  • 使用 Figma-MCP 与 Claude Code 还原 UI 设计图
  • 无监督学习降维详解:PCA与t-SNE的关键概念与核心原理
  • VRM4U插件在Unreal Engine中实现VRM模型高效集成方案
  • AI 从业者分享:14 天掌握大模型核心知识学习路线图
  • Kali Linux 虚拟机安装教程
  • 前端 PWA 实战:构建离线可用与可安装的 Web 应用
  • Stable Diffusion v1-5-pruned.safetensors本地部署指南
  • 基于 ComfyUI 工作流的 Stable Diffusion 服装替换实战
  • flux-kontext-pro 深度解析:前端状态管理从入门到精通
  • MySQL 表的增删改查详解(上)
  • OpenClaw 多 Agent 系统对接飞书机器人指南

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online