ArrayList为什么比LinkedList查询速度快
知乎:https://www.zhihu.com/question/61920401
举个简单的例子:假如有很多人,排成长队,这个时候要找5号的人就非常简单,问都不用问,直接定位。假如不排成长队,只是随机站在很大的广场里面,但是每个人只知道自己的前一个人和后一个人的位置,而且你只知道第一个人的位置,这个时候你要找第5个人的时候你就得从第一个人开始问后面的是谁,一直问下去才知道第5个人在哪里。
先看源码
ArrayList的get()方法:时间复杂度为O(1)
ArrayList的get()方法:时间复杂度为O(1)
public AnyType get(int idx) { if(idx < 0 || idx >= size()) throw new ArrayIndexOutOfBoundsException(); return theItems[idx]; }
LinkedList的get()方法:时间复杂度为O(N)
private Node<AnyType> getNode(int idx, int lower, int upper) { Node<AnyType> p; if(idx < lower || idx > upper) throw new IndexOutOfBoundsException(); if(idx < (size() >> 1)) { p = beginMarker.next; for(int i = 0; i < idx; i++) p = p.next; }else { p = endMarker; for(int i = size(); i >idx; i--) p = p.prev; } return p; }
ArrayList可以直接通过数组下标得到元素,而LinkedList则需要根据所给的下标从头部或尾部开始往下标的位置依次获得下一个元素或上一个元素。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理