ArrayList和LinkedList区别?看完秒懂~

ArrayList和LinkedList区别?看完秒懂~工作中 大家是不是经常分不清楚 什么时候用 ArrayList 什么时候用 LinkedList

工作中,大家是不是经常分不清楚,什么时候用ArrayList,什么时候用LinkedList?

所以我们应该弄清楚ArrayList和LinkedList之间的区别,然后才知道工作中该如何选型。

一、ArrayList和LinkedList查询之间的区别

首先,从名字就可以看出,ArrayList和LinkedList的区别,ArrayList是基于数组的,LinkedList是基于链表的。

从这一点,我们可以推理出来,ArrayList适合查询,LinkedList适合插入,但是这只是一个广泛的结论,我们应该了解的更细致一点。

比如,对于ArrayList,它真正的优点是按下标查询元素,相比于LinkedList,LinkedList也可以按下标查询元素,但是LinkedList需要对底层链表进行遍历,才能找到指定下标的元素,而ArrayList不用,所以这是ArrayList的优点。

但是,如果我们讨论的是获取第一个元素,或最后一个元素,ArrayList和LinkedList在性能上是没有区别的,因为LinkedList中有两个属性分别记录了当前链表中的头结点和尾结点,并不需要遍历链表。

以上,是对于ArrayList和LinkedList在查询方面的区别。

二、ArrayList和LinkedList插入之间的区别

我们再来研究一下在插入方面的区别:

ArrayList可以插入到指定下标位置,或者数组末尾,这种插入普通情况下是很快的,但是如果某次插入操作触发了扩容,那么本次插入就增加了额外的扩容成本。

对于LinkedList,如果是插在链表的头部或者是尾部都是很快的,因为LinkedList中有单独的属性记录的链表的头结点和尾结点,不过,如果是插在指定下标位置,那么就需要遍历链表找到指定位置,从而降低了效率。

但是,使用LinkedList是不用担心扩容问题的,链表是不需要扩容的。

综上:

1.默认情况下,比如调用ArrayList和LinkedList的add(e)方法,都是插入在最后,如果这种操作比较多,那么就用LinkedList,因为不涉及到扩容。

2.如果调用ArrayList和LinkedList的add(index, e)方法比较多,就要具体考虑了,因为ArrayList可能会扩容,LinkedList需要遍历链表,这两种到底哪种更快,是没有结论的,得具体情况具体分析。

3.还有,如果是插入场景比较少,但经常需要查询的话,查询分两种,第一种就是普通遍历,也就是经常需要对List中的元素进行遍历,那么这两种是区别不大的,遍历链表和遍历数组的区别,第二种就是经常需要按指定下标获取List中的元素,如果这种情况如果比较多,那么就用ArrayList

以上,是对ArrayList和LinkedList在查询和插入之间的分析和对比。

大家如果还有其他对比思路或想法,可留言进行讨论。

另外,LinkedList还有一个特殊功能,LinkedList可以当做双端队列使用,这个是ArrayList不具备的。

这一点从源码也是看得出来的,ArrayList和LinkedList都实现了List接口,但是LinkedList还额外实现了Deque接口。

这个问题也是阿里面试的真题,希望大家有所收获,下面给大家分享大厂面试真题。欢迎扫下方名片来领取

ArrayList和LinkedList区别?看完秒懂~

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/213917.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午5:21
下一篇 2026年3月18日 下午5:21


相关推荐

  • RSA算法原理——(1)目前常见加密算法简介

    RSA算法原理——(1)目前常见加密算法简介今天为大家带来 RSA 算法的讲解文章 主要包括 RSA 算法的加解密过程和公式论证 文章可能会稍微有点长 但是内容绝对是目前全网最详细的 最通俗易懂的 跟着昌昌来一起揭开 RSA 非对称加密算法的面纱 保你看完本篇文章之后可以说 RSAjustsoso 一 常见加密算法目前常见的加密算法可以分成三类 对称加密算法 非对称加密算法和 Hash 算法

    2026年3月26日
    3
  • C Conditional 特性

    C Conditional 特性Conditional 特性简介 Conditional 特性允许我们包括或排斥特定方法的所有调用 为方法声明应用 Conditional 特性并把编译符作为参数来使用 如果定义了编译符号 那么编译器会包含所有调用这个方法的代码 这和普通方法没有区别 如果没有定义编译符号 那么编译器会忽略代码中这个方法的所有调用 Conditional 代码示例以下示例定义了一个 SayHello

    2026年3月17日
    2
  • linux命令看文件或文件夹个数[通俗易懂]

    linux命令看文件或文件夹个数

    2022年2月11日
    79
  • fastdfs 上传文件(nginx文件上传服务器)

    一、FastDFS介绍FastDFS开源地址:https://github.com/happyfish100参考:分布式文件系统FastDFS设计原理参考:FastDFS分布式文件系统1.简介FastDFS是一个开源的高性能分布式文件系统(DFS)。它的主要功能包括:文件存储,文件同步和文件访问,以及高容量和负载平衡。主要解决了海量数据存储问题,特别适合以中小文件(…

    2022年4月16日
    142
  • eXtremeDB新手之Linux平台,eXtremeDB

    eXtremeDB新手之Linux平台,eXtremeDBIamdoingaclu whydidIencou home builder master master50 master eXtremeDB 4 0 1780 linux packs x64 Theerrorinfo ly l

    2026年3月20日
    2
  • 感知机介绍及MATLAB实现

    感知机介绍及MATLAB实现文章目录前言 1 感知机原理 1 1 感知机结构 1 2 感知机学习过程 2MATLAB 实现 1 引入库 2 读入数据总结前言提示 这里可以添加本文要记录的大概内容 例如 随着人工智能的不断发展 机器学习这门技术也越来越重要 很多人都开启了学习机器学习 本文就介绍了机器学习的基础内容 提示 以下是本篇文章正文内容 下面案例可供参考 1 感知机原理 感知机 Perceptron 是二分类线性分类模型 以二维平面为例 感知机分类的过程可以看做是寻找一条直线用于分割两组数据 假设直线的一侧是正类 则直线的

    2026年3月26日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号