ArrayList 和 linkedList 区别?

1.是否保证线程安全: ArrayList 和 LinkedList 都是不同步的,也就是不保证线程安全;

2.底层数据结构: Arraylist 底层使用的是 Object 数组;LinkedList 底层使用的是双向链表 数据结构(JDK1.6 之前为循环链表,JDK1.7 取消了循环。注意双向链表和双向循环链表的区别,下面有介绍到!)

3.插入和删除是否受元素位置的影响:

--ArrayList 采用数组存储,所以插入和删除元素的时间复杂度受元素位置的影响。 比如:执行 add(E e)方法的时候, ArrayList 会默认在将指定的元素追加到此列表的末尾,这种情况时间复杂度就是 O(1)。但是如果要在指定位置 i 插入和删除元素的话(add(int index, E element))时间复杂度就为 O(n-i)。因为在进行上述操作的时候集合中第 i 和第 i 个元素之后的(n-i)个元素都要执行向后位/向前移一位的操作。

--LinkedList 采用链表存储,所以,如果是在头尾插入或者删除元素不受元素位置的影响(add(E e)、addFirst(E e)、addLast(E e)、removeFirst() 、 removeLast()),近似 O(1),如果是要在指定位置 i 插入和删除元素的话(add(int index, E element),remove(Object o)) 时间复杂度近似为 O(n) ,因为需要先移动到指定位置再插入。

相关推荐
开心香辣派小星1 小时前
23种设计模式-15解释器模式
java·设计模式·解释器模式
Halo_tjn1 小时前
虚拟机相关实验概述
java·开发语言·windows·计算机
摆烂z2 小时前
Docker与Jib(maven插件版)实战
java
RainbowSea2 小时前
从 Spring Boot 2.x 到 3.5.x + JDK21:一次完整的生产环境迁移实战
java·spring boot·后端
笨手笨脚の2 小时前
Spring Core常见错误及解决方案
java·后端·spring
奶油松果2 小时前
Springboot自动装配 - redis和redission
java·spring boot·redis
霍夫曼3 小时前
UTC时间与本地时间转换问题
java·linux·服务器·前端·javascript
VX:Fegn08953 小时前
计算机毕业设计|基于Java人力资源管理系统(源码+数据库+文档)
java·开发语言·数据库·vue.js·spring boot·后端·课程设计
荔枝hu3 小时前
springboot和shiro组合引入SseEmitter的一些坑
java·spring boot·后端·sseeitter
老华带你飞3 小时前
健身房|基于springboot + vue健身房管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端