ArrayList和LinkedList区别
底层数据结构#
ArrayList是动态数组的数据结构实现。
LinkedList是双向链表的数据结构实现。
效率#
- 下标査询
- ArrayList按照下标査询的时间复杂度O(1)。
- LinkedList不支持下标查询。
- 查找(未知索引)
- ArrayList需要遍历,链表也需要链表,时间复杂度都是O(n)。
- 新增和删除
- ArrayList尾部插入和删除,时间复杂度是O(1);其他部分增删需要挪动数组,时间复杂度是O(n)。
- LinkedList头尾节点增删时间复杂度是O(1),其他都需要遍历链表,时间复杂度是O(n)。
空间#
ArrayList底层是数组,内存连续,节省内存。
LinkedList是双向链表需要存储数据,和两个指针,更占用内存。
线程是否安全#
ArrayList和LinkedList都不是线程安全的。
如果需要保证线程安全,有两种方案
- 在方法内使用,局部变量则是线程安全的。
- 使用线程安全的ArrayList和LinkedList。
List<Object> syncArrayList = Collections.synchronizedList(new ArrayList<>());
List<Object> syncLinkedList = Collections.synchronizedList(new LinkedList<>());
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)