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 在修改时不可避免地需要移动大量数据。
相关推荐
Sam_Deep_Thinking3 分钟前
如何让订单系统和营销系统解耦
java·架构·系统架构
云泽8083 分钟前
C++11 核心特性全解:列表初始化、右值引用与移动语义实战
开发语言·c++
froginwe1121 分钟前
DOM 加载函数
开发语言
lzhdim23 分钟前
SQL 入门 12:SQL 视图:创建、修改与可更新视图
java·大数据·服务器·数据库·sql
Hello eveybody37 分钟前
介绍一下背包DP(Python)
开发语言·python·动态规划·dp·背包dp
AI进化营-智能译站1 小时前
ROS2 C++开发系列12-用多态与虚函数构建可扩展的ROS2机器人行为模块
开发语言·c++·ai·机器人
iCxhust1 小时前
微机原理实践教程(C语言篇)---A002流水灯
c语言·开发语言·单片机·嵌入式硬件·51单片机·课程设计·微机原理
FQNmxDG4S1 小时前
Maven依赖管理:版本冲突解决与生命周期控制
java·数据库·maven
莎士比亚的文学花园1 小时前
Linux驱动开发(3)——设备树
开发语言·javascript·ecmascript
图码1 小时前
如何用多种方法判断字符串是否为回文?
开发语言·数据结构·c++·算法·阿里云·线性回归·数字雕刻