ArrayList为什么比LinkedList查询速度快

知乎:https://www.zhihu.com/question/61920401

举个简单的例子:假如有很多人,排成长队,这个时候要找5号的人就非常简单,问都不用问,直接定位。假如不排成长队,只是随机站在很大的广场里面,但是每个人只知道自己的前一个人和后一个人的位置,而且你只知道第一个人的位置,这个时候你要找第5个人的时候你就得从第一个人开始问后面的是谁,一直问下去才知道第5个人在哪里。
 
先看源码
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则需要根据所给的下标从头部或尾部开始往下标的位置依次获得下一个元素或上一个元素。

posted @   野生野鸡码农  阅读(59)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示