java 中ArrayList与LinkedList性能比较

发布时间 - 2026-01-11 00:02:30    点击率:

java 中ArrayList与LinkedList性能比较

今天看一框架的代码,看到有些 可以使用ArrayList的地方 使用的是 LinkedList,用到的情景是在一个循环里面进行顺序的插入操作。

众所周知java里面List接口有两个实现ArrayList 和 LinkedList,他们的实现原理分别是c语言中介绍的数组和链表。

正如学习数据结构时的认识,对于插入操作,链表的结构更高效,原因是可以通过修改节点的指针 就可以完成插入操作, 而不像数组,

需要把插入位置之后的数组元素依次后移。

但是,实际情况真如上面设想一样吗,下面通过一个简单的例子实践,看能得出什么结论。

public static void main(String[] args) {
    List<String> arrayList = new ArrayList<String>();
    List<String> linkedList = new LinkedList<String>();
    long time1 = System.currentTimeMillis();
    for(int i = 0; i < 1000000; i++) {
      arrayList.add(new String("abc"));
    }
    long time2 = System.currentTimeMillis();
    for(int i = 0; i < 1000000; i++) {
      linkedList.add(new String("abc"));
    }
    long time3 = System.currentTimeMillis();
    System.out.println("arrayList.insert_time = " + (time2 - time1));
    System.out.println("linkedList.insert_time = " + (time3 - time2));
    long time11 = System.currentTimeMillis();
    for(int i = 0; i < 10000; i++) {
      int random = RandomUtils.nextInt(10000);
      String temp = arrayList.get(random);
    }
    long time12 = System.currentTimeMillis();
    for(int i = 0; i < 10000; i++) {
      int random = RandomUtils.nextInt(10000);
      String temp = linkedList.get(random);
    }
    long time13 = System.currentTimeMillis();
    System.out.println("arrayList.read_time = " + (time12 - time11));
    System.out.println("linkedList.read_time = " + (time13 - time12));
  }

运行结果:

arrayList.insert_time = 188
linkedList.insert_time = 250
arrayList.read_time = 16
linkedList.read_time = 234

通过结果可以看出:无论什么情况,ArrayList更加高效。尤其对于随机读取,数组的效率是链表的14倍之多。

而插入操作,两者用时相差不多,但是还是数组的实现效率高一些。

对于其中原因,仔细想想也不难想明白。

当List存储的内容不多时,写入List的最后的元素,ArrayList和LinkedList用时差不多。

但是当List存储的元素个数很大时,通过数组结构实现的ArrayList插入到最后可以通过数组下标很快访问到,但是LinkedList就需要访问每个节点直到找到最后的元素再进行插入操作,这中操作步骤的耗时是巨大的,所以列表数量越大,LinkedList就越感吃力了。

当然,对于要求随机插入的场景,这个时候LinkedList就要比ArrayList适合了。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# ArrayList和LinkedList性能比较  # java  # ArrayList与LinkedList比较  # JAVA LinkedList和ArrayList的使用及性能分析  # 分析Java中ArrayList与LinkedList列表结构的源码  # Java中ArrayList和LinkedList的遍历与性能分析  # java中ArrayList与LinkedList对比详情  # java中ArrayList和LinkedList的区别详解  # Java中ArrayList和LinkedList区别  # Java中ArrayList和LinkedList的区别  # JAVA中ArrayList与LinkedList二者特点与区别总结  # 可以通过  # 链表  # 的是  # 他们的  # 是在  # 不多  # 数据结构  # 希望能  # 这个时候  # 要比  # 实际情况  # 可以使用  # 可以看出  # 越大  # 谢谢大家  # 之多  # 就越  # 众所周知  # 就可以  # 真如 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 什么是javascript作用域_全局和局部作用域有什么区别?  Java解压缩zip - 解压缩多个文件或文件夹实例  如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环  如何挑选最适合建站的高性能VPS主机?  如何用免费手机建站系统零基础打造专业网站?  香港服务器网站推广:SEO优化与外贸独立站搭建策略  Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤  成都网站制作公司哪家好,四川省职工服务网是做什么用?  如何快速辨别茅台真假?关键步骤解析  C语言设计一个闪闪的圣诞树  Laravel如何优化应用性能?(缓存和优化命令)  如何将凡科建站内容保存为本地文件?  Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理  如何打造高效商业网站?建站目的决定转化率  制作公司内部网站有哪些,内网如何建网站?  laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法  如何基于云服务器快速搭建网站及云盘系统?  Laravel如何构建RESTful API_Laravel标准化API接口开发指南  Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】  PHP正则匹配日期和时间(时间戳转换)的实例代码  消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工  Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理  Java垃圾回收器的方法和原理总结  python中快速进行多个字符替换的方法小结  jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】  JavaScript中如何操作剪贴板_ClipboardAPI怎么用  Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】  如何在IIS中配置站点IP、端口及主机头?  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  Python正则表达式进阶教程_复杂匹配与分组替换解析  uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址  简历在线制作网站免费版,如何创建个人简历?  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  如何在建站之星网店版论坛获取技术支持?  百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭  如何用景安虚拟主机手机版绑定域名建站?  如何续费美橙建站之星域名及服务?  谷歌Google入口永久地址_Google搜索引擎官网首页永久入口  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  VIVO手机上del键无效OnKeyListener不响应的原因及解决方法  Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  EditPlus中的正则表达式实战(5)  个人网站制作流程图片大全,个人网站如何注销?  桂林网站制作公司有哪些,桂林马拉松怎么报名?  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  昵图网官方站入口 昵图网素材图库官网入口  标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析  Bootstrap CSS布局之列表