ArrayList和LinkedList的区别

  1. 底层数据结构
  • ArrayList 是动态数组的数据结构实现。

  • LinkedList 是双向链表的数据结构实现。

  1. 操作数据效率
  • ArrayList按照下标查询的时间复杂度O(1)【内存是连续的,根据寻址公式】, LinkedList不支持下标查询。

  • 查找(未知索引): ArrayList需要遍历,链表也需要链表,时间复杂度都是O(n)。

  • 新增和删除

    • ArrayList尾部插入和删除,时间复杂度是O(1);其他部分增删需要挪动数组,时间复杂度是O(n)。

    • LinkedList头尾节点增删时间复杂度是O(1),其他都需要遍历链表,时间复杂度是O(n)。

  1. 内存空间占用
  • ArrayList底层是数组,内存连续,节省内存。

  • LinkedList 是双向链表需要存储数据,和两个指针,更占用内存。

  1. 线程安全
  • ArrayList和LinkedList都不是线程安全的。

  • 如果需要保证线程安全,有两种方案:

    • 在方法内使用,局部变量则是线程安全的。

    • 使用线程安全的ArrayList和LinkedList。

相关推荐
2401_8582861121 分钟前
L29.【LeetCode笔记】丢失的数字
c语言·开发语言·算法
MiyamiKK5723 分钟前
leetcode_链表 876.链表的中间节点
算法·leetcode·链表
LNsupermali25 分钟前
利用双指针一次遍历实现”找到“并”删除“单链表倒数第K个节点(力扣题目为例)
算法·leetcode·职场和发展
奈葵27 分钟前
JAVA EE
java·java-ee
艺杯羹1 小时前
二级C语言题解:统计奇偶个数以及和与差、拼接字符串中数字并计算差值、提取字符串数组中单词尾部字母
c语言·数据结构·算法
艺杯羹1 小时前
二级C语言题解:孤独数、找最长子串、返回两数组交集
c语言·开发语言·数据结构·算法
比特在路上1 小时前
ListOJ13:环形链表(判断是否为环形链表)
c语言·开发语言·数据结构·链表
ChinaRainbowSea1 小时前
三. Redis 基本指令(Redis 快速入门-03)
java·数据库·redis·缓存·bootstrap·nosql
DEARM LINER1 小时前
RabbitMQ 分布式高可用
java·spring boot·分布式·rabbitmq
charlie1145141911 小时前
嵌入式MCU面试笔记2
笔记·单片机·嵌入式硬件·面试·串口通信·uart