ArrayList 和 LinkedList 区别

本文详细比较了ArrayList和LinkedList两种Java集合类的区别。ArrayList基于动态数组,适合随机访问,而LinkedList采用双向链表,更适合插入和删除操作。LinkedList比ArrayList占用更多内存,并且由于其结构特性,查询速度较慢。此外,LinkedList还实现了Deque接口,可以作为队列使用。在选择使用时,应根据具体需求考虑其性能特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ArrayList:基于数组实现;

在这里插入图片描述

LinkedList:基于双向链表实现;使用 Node 存储链表节点信息;

在这里插入图片描述
ArrayList 和 LinkedList 都实现了 List 接口,且两者都是线程不安全的

区别

  1. ArrayList 使用动态数组存储元素,而 LinkedList 使用双向链表来存储元素。

  2. 对于随机访问,ArrayList要优于LinkedList; 对于插入和删除操作,LinkedList优于ArrayList。

  3. LinkedList比ArrayList更占内存,因为LinkedList的节点除了存储数据,还存储了两个引用,一个指向前一个元素,一个指向后一个元素。

  4. ArrayList 只能用作列表;LinkedList 可以用作列表或者队列,因为它还实现了 Deque 接口。

    在查询时,ArrayList 直接根据下标获取,和数组的长度无关,查询速度快;而LinkedList 则需要从头节点开始遍历,下标小于链表长度的一半时,从前往后遍历;否则从后往前遍历,查询速度慢。

    在增加时,ArrayList 将新的元素添加的指定的位置时,会将插入位置后的元素依次向后复制,添加速度慢;而 LinkedList 则是可以直接加入进去,先用 n 记录 p.next ,然后 p.next = newNode ,再把 newNode.next = n;这样就实现了添加,而且速度更快。

    在删除时,ArrayList 会将指定位置后的元素依次向前复制,删除速度也慢;而 LinkedList 则是将原来的 p.next 变为了p.next.next,就实现了删除,而且速度更快。
    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值