ArrayList和LinkedList

一、介绍

-**arraylist:**底层数据结构是数组,特点就是内存连续存储,连续存储带来两个特性:1. 通过随机访问元素效率极高,因为可以很快根据索引计算出元素地址。2. 如果在头部中间进行增删,后面的元素就需要进行相应的挪动,这个操作成本很高。

  • linkedlist:底层数据结构是双向链表,链表的特点就是在指定位置的增删操作非常高效,因为只需要更改指针引用。但是前提是指定位置已知,如果未知,找到需要操作的位置也需要O(n)的时间复杂度,也就是随机访问元素的时间复杂度。这么一看好像linkedlist只有在头尾操作快了。

二、对比

我在了解到这些后会认为linkedlist比较鸡肋,只在头尾操作快剩下的好像都比不过arraylist,事实上开发过程中大部分情况确实也都会使用arraylist,但是linkedlist也有用武之地:

操作 ArrayList LinkedList 说明
​随机访问(get/set)​​ ​O(1)​​ O(n) ArrayList 的绝对优势
​在头部插入/删除​ O(n) ​O(1)​​ LinkedList 的绝对优势
​在尾部插入/删除​ O(1) (摊销) ​O(1)​​ 两者都很快,但ArrayList可能触发扩容
​在中间插入/删除​ O(n) O(n) ​查找时间 + 操作时间。但操作部分ArrayList需要移动元素,可能更耗时
​使用迭代器遍历并删除​ O(n²) (最坏情况) ​O(n)​​ ​LinkedList 的核心优势场景​

说明:

LinkedList 的优势不在于那些需要先按索引或值查找再操作的通用场景。它的优势在于:​​

  1. 在数据结构的"两端"进行频繁的插入删除操作(例如实现队列、栈)。
  2. 在已知节点(通常通过迭代器获得)上进行大量的、频繁的插入或删除操作,这时它能提供真正 O(1) 的修改性能,而 ArrayList 在修改时不可避免地需要移动大量数据。
相关推荐
小羊没烦恼!3 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
俊昭喜喜里3 天前
java中的继承和多态的区别
java
小羊没烦恼!3 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
譕痕3 天前
JSONObject与JSONArray封装数据格式区别
java·json
胡写代码3 天前
别再前后端各写一套表单校验了
java·后端
小鱼能吃糖3 天前
缺陷修复总览 · mall电商项目:5类缺陷,1个病根,4个业务域
java·电商
此时不提桶,更待何时3 天前
01-06-A-JVM排查实战详解
java·jvm
伞伞悦读3 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
vipxieliang3 天前
ValidX 在 DDD 领域驱动设计中的实践
java·spring boot
C语言小火车3 天前
C/C++ 为什么需要编译器?
开发语言·c++