Java中ArrayList和LinkedList的区别

Java中虽然ArrayList和LinkedList都实现了List接口,但是其底层原理不相同。

ArrayList的底层是一个数组,LinkedList的底层是链表。

ArrayList在增加和删除元素时,时间复杂度是O(N)。

LinkedList则是O(1),因为LinkedList的底层是一个双向链表,拥有头节点和尾节点,可以通过头节点和尾节点直接添加元素。也可以直接通过索引来删除元素。但是在指定位置添加元素时候,时间复杂度和ArrayList的时间复杂度相同为O(N)。

虽然LikedList在增删查改这方面优于ArrayList,但是两者的访问速度则是ArrayList比LinkedList快。因为ArrayList的底层是数组,数组的访问速度优于链表的访问速度。

ArrayList在扩容的时候需要申请新的空间,拷贝原数组的数据,释放旧空间。会有不小的消耗。

当你数组只有100的空间时,满了数组扩充到200,此时你只需要存储102个数据,就会浪费98个空间,造成空间的剩余。但是对于链表来说,我们存一个数据,才开辟一个空间给我们存储数据,就避免了空间上的浪费。

Original: https://www.cnblogs.com/interdrp/p/16516139.html
Author: 锐洋智能
Title: Java中ArrayList和LinkedList的区别

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/538680/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • <5>Linux-静态库和动态库

    1 库及库的分类 库本质:是二进制形式的目标代码(.o) 库的作用? † 库的分类:静态库和动态库(共享库)。 静态库和动态库的区别 如果程序是在编译时加载库文件的,就是使用了静态…

    Java 2023年6月15日
    054
  • JVM垃圾回收机制

    一、如何判断对象可以可以被回收 1.1 引用计数法 定义:只要一个对象被变量所引用,则该对象计数就+1,若被引用了两次,则它的引用计数就变为2,如果某一个变量不再引用它了,则它的引…

    Java 2023年6月8日
    074
  • 太方便了,钉钉上就可完成代码发布审批啦!

    如今,不少企业的发布流程要求代码发布到生产环境前需要经过审批。这种发布审批流程,对企业的的CI/CD工具提出了新要求:CI/CD步骤里需要支持人工卡点审批,并在人工卡点审批通过后能…

    Java 2023年6月8日
    070
  • 【ZooKeeper系列】2.用Java实现ZooKeeper API的调用

    &#x6E29;&#x99A8;&#x63D0;&#x793A;:在这里我再次提个小要求,希望大家能习惯看 官方文档,文档虽然是英文但用词都比较简单…

    Java 2023年5月29日
    068
  • Java Class 定义、创建对象、访问属性、及执行过程

    类的定义 class 类名 { String 属性名称;//(也称成员变量、field字段)可以定义多个 int 属性名; char 属性名; int[] 属性名; // 成员变量…

    Java 2023年6月5日
    0140
  • 技能篇:docker的简易教程

    虚拟机技术每家公司发展到一定规模都必须考虑的,更好的环境隔离,更好的事故排查,更好的服务部署 docker的原理 docker更换阿里源 docker容器的相关命令 Dockerf…

    Java 2023年6月5日
    072
  • java junit @Test 变量共享问题 –springboot 中的Controller静态变量可以共享

    问题背景:我贪图test 方便启动不同的进程(也方便停止),对应的控制台输出,但我没有测试 又希望相互共享数据。 如果启动一个springboot,通过controller 来启动…

    Java 2023年5月29日
    094
  • 阿尔兹海默症_记不住的java8 List操作

    一丢丢废话 使用java8对list操作不是很方便嘛但是呢,脑子不好,似乎老是记不住 取出List中的某一列作为一个新的list 假设有一个实例User,User中有成员变量nam…

    Java 2023年6月7日
    066
  • java如何对接企业微信

    前言 最近实现社群对接企业微信,对接的过程遇到一些点,在此记录。 企业微信介绍 企业微信具有和微信一样的体验,用于企业内部成员和外部客户的管理,可以由此构建出社群生态。企业微信提供…

    Java 2023年5月29日
    0120
  • Java如何实现消费数据隔离?

    我是3y,一年 CRUD经验用十年的 markdown程序员👨🏻‍💻常年被誉为优质八股文选手 今天继续更新austin项目,如果还没看过该系列的同学可以点开我的历史文章回顾下,在看…

    Java 2023年6月9日
    065
  • 继承中的初始化和加载

    继承关系中的执行顺序代码 package onjava8.extend; /** * &#x7EE7;&#x627F;&#x5173;&#x7CFB…

    Java 2023年6月15日
    065
  • Nginx代理kibana方法2

    编辑kibana的配置文件,对 server.basePath进行定义,配置路径。 cat /etc/kibana/kibana.yml Default Kibana config…

    Java 2023年5月30日
    059
  • IO(字节流的读写操作)

    IO流的分类:* 流向:* 输入流 读取数据* 输出流 写出数据* 数据类型:* 字节流* 字节输入流 读取数据 InputStream* 字节输出流 写出数据 OutputStr…

    Java 2023年6月5日
    0103
  • 从0到1写一款自动为Markdown标题添加序号的Jetbrains插件

    1. markdown-index 最近做了一个Jetbrains的插件,叫 markdown-index,它的作用是为Markdown文档的标题自动添加序号,效果如下: 目前已经…

    Java 2023年6月7日
    092
  • 使用MongoDB做评论的原因是什么?

    1.加载大量低价值的业务数据 数据量大 但自身价值比较低 。 例如我们更多的是关注文章本身内容 而不是数据量庞大的评论内容 2.评论的读写操作频繁 查询评论和发表评论 3.又因为评…

    Java 2023年6月6日
    069
  • 如何设计一个更通用的查询接口

    临近放假,手头的事情没那么多,老是摸鱼也不好,还是写写博客吧。 今天来聊聊: 如何设计一个通用的查询接口。 首先,我们从一个简单的场景开始。现在,我需要一个订单列表,用来查询【我的…

    Java 2023年6月14日
    088
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球