首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么对于ArrayList,get操作的运行时为O(1),而对于LinkedList,运行时为O(N)?

对于ArrayList,get操作的运行时为O(1)(即常数时间复杂度),是因为ArrayList是基于数组实现的数据结构。数组具有随机访问的特点,每个元素在内存中的位置是连续的,通过索引可以直接定位到所需的元素,因此获取元素的时间复杂度为常数级别。

相反,对于LinkedList,get操作的运行时为O(N)(即线性时间复杂度),是因为LinkedList是基于链表实现的数据结构。链表中的每个节点包含了存储的值以及指向下一个节点的指针。要获取指定索引位置的元素,需要从链表头开始,依次遍历节点直到达到目标位置。因此,获取元素的时间复杂度与链表的长度成正比,即为O(N)。

由于ArrayList的元素在内存中是连续存储的,所以可以通过索引直接访问到目标元素,时间复杂度为O(1),适用于频繁读取元素的场景。而LinkedList需要遍历节点才能找到目标元素,时间复杂度为O(N),适用于频繁插入、删除元素的场景。因此,在选择使用ArrayList还是LinkedList时,需要根据具体的应用场景来综合考虑元素的读取、插入、删除等操作的频率和重要性。

以下是腾讯云相关产品和产品介绍链接地址:

  • 对象存储 COS:提供高扩展性、低成本、可靠安全的云端对象存储服务,适用于海量数据存储、图片、音视频、备份归档等场景。
  • 云数据库 MySQL:提供稳定可靠、弹性伸缩的云端MySQL数据库服务,适用于中小型网站、移动应用、游戏、物联网等场景。
  • 负载均衡 CLB:提供将访问流量合理分配给多台云服务器的负载均衡服务,提高系统的稳定性和性能。
  • 弹性伸缩 AS:帮助用户根据业务需求自动增减云服务器,实现弹性伸缩,提高系统的灵活性和稳定性。
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

对于一个运行时100n*n算法,要使其在同一台机器上,在比一个运行时2^n算法运行很快,n最小值是多少

在《算法导论》第一部分练习中,有这样一道算法题: 1.2-3 对于一个运行时100n*n算法,要使其在同一台机器上,在比一个运行时2^n算法运行很快,n最小值是多少?...下面给出我自己解题思路: 对于100n^2和2^n两个算法进行比较,我们可以这样做:对100n^2-2^n操作,如果结果小于0,那么此时n就是我们所求值。...-3:对于一个运行时100n^2算法,要使其在同一台机器上,比一个运行时2^n算 8 * 法运行得更快,n最小值是多少?...100n^2和2^n两个算法进行比较,我们可以这样做:对100n^2-2^n操作,如果结果小于0,那么此时n就是我们所求值。...38 } 运行效果: 第1次计算结果:98 第2次计算结果:396 第3次计算结果:892 第4次计算结果:1584 第5次计算结果:2468 第6次计算结果:3536 第7次计算结果:4772

1.6K30

数据结构思维 第四章 `LinkedList`

当人们看到两个线性操作时,他们有时会认为结果是平方,但是只有一个操作嵌套在另一个操作中才适用。如果你在一个操作之后调用另一个,运行时间会相加。如果它们都是O(n),则总和也是O(n)。...你将使用Profiler, Java 实现ArrayListLinkedList,划分add方法性能。...解释嘈杂测量值更好方法是,在重对数刻度上绘制运行时间和问题规模。 为什么?我们假设运行时间与n ** k成正比,但是我们不知道指数k是什么。...其中重要一点:如果你在图形看到这样直线,这并不意味着该算法是线性。如果对于任何指数k,运行时间与n ** k成正比,我们预计看到斜率k直线。如果斜率接近1,则表明算法是线性。...你应该得到类似图 4.1 结果,但是你可能需要调整startN或endMillis。估计斜率应该接近1,表明执行n个添加操作所需时间与n成正比;也就是说,它是O(n)

30620
  • 数据结构思维 第五章 双链表

    我们得出结论,执行n次添加是 O(n),所以平均来说,单个添加时间是常数时间,或者O(1),基于算法分析,这是我们预期。...相反,如果对于任何指数k,运行时间与n ** k成正比,我们预计会看到斜率k直线。在这种情况下,我们预计,n次添加总时间与n ** 2成正比,所以我们预计会有一条斜率2直线。...图 5.2:分析结果:在LinkedList末尾添加n个元素运行时间和问题规模 同样,测量值很嘈杂,线不完全是直,但估计斜率1.19,接近于在头部添加元素,并不非常接近2,这是我们根据分析预期...(头部) n 1 remove(一般) n n 5.5 结构选择 对于头部插入和删除,双链表实现优于ArrayList。...如果你知道,你应用程序运行时间取决于get和set元素所需时间,则ArrayList可能是更好选择。如果运行时间取决于在开头或者末尾附加添加和删除元素,LinkedList可能会更好。

    28030

    Java数据结构与算法解析(一)——表

    } } 不管ArrayList还是LinkedList作为参数被传递,makeList1运行时间都是ON),因为对add每次调用都是在表末端进行从而花费常数时间(可以忽略对ArrayList...ON),但是对于ArrayList运行时间则是On^2),因为在ArrayList中,在前端进行添加是一个ON操作。...ON),但对于LinkedList来说,其运行时间则是On^2),因为LinkedList中,对get调用为ON操作。...i++; } } } 对于LinkedList来说,上面的解法运行时间则是On^2),使用迭代器效率会更好,当然在使用迭代器时,我们不能直接使用List...即使使用Iterator,ArrayListremove方法还是On^2),因为删除,数组数还是需要进行移动。

    31140

    ArrayList Vector LinkedList(一)

    ArrayList没有同步。 size,isEmpty,get,set方法运行时常数。但是add方法开销分摊常数,添加n个元素需要O(n)时间。其他方法运行时线性。   ...添加数据使用put(key, value),取出数据使用get(key),这两个基本操作时间开销常数。...总结   如果涉及到堆栈,队列等操作,应该考虑用List,对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用ArrayList。   ...但是,如果在集合其他位置增加或移除元素那么花费时间会呈线形增长:O(n-i),其中n代表集合中元素个数,i代表元素增加或移除元素索引位置。为什么会这样呢?...O(1),但它在索引一个元素使用缺比较慢-O(i),其中i是索引位置.使用ArrayList也很容易,因为你可以简单使用索引来代替创建iterator对象操作

    42960

    Java容器类List、ArrayList、Vector及map、HashTable、HashMap区别与用法

    ArrayList没有同步。 size,isEmpty,get,set方法运行时常数。但是add方法开销分摊常数,添加n个元素需要O(n)时间。其他方法运行时线性。   ...添加数据使用put(key, value),取出数据使用get(key),这两个基本操作时间开销常数。...总结   如果涉及到堆栈,队列等操作,应该考虑用List,对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用ArrayList。   ...但是,如果在集合其他位置增加或移除元素那么花费时间会呈线形增长:O(n-i),其中n代表集合中元素个数,i代表元素增加或移除元素索引位置。为什么会这样呢?...O(1),但它在索引一个元素使用缺比较慢-O(i),其中i是索引位置.使用ArrayList也很容易,因为你可以简单使用索引来代替创建iterator对象操作

    1.5K80

    数据结构思维 第二章 算法分析

    ArrayListLinkedList。...对于一些应用,LinkedList更快;对于其他应用,ArrayList更快。 要确定对于特定应用,哪一个更好,一种方法是尝试它们,并看看它们需要多长时间。...常数时间:如果运行时间不依赖于输入大小,算法是“常数时间”。例如,如果你有一个n个元素数组,并且使用下标运算符([])来访问其中一个元素,则此操作将执行相同数量操作不管数组有多大。...线性:如果运行时间与输入大小成正比,则算法“线性”。例如,如果你计算数组和,则必须访问n个元素并执行n - 1个添加。操作总数(元素访问和加法)2 * n -1,与n成正比。...所以如果操作总数2 * n + 1,则属于O(n)。主要常数2和附加项1对于这种分析并不重要。与之类似,n ** 2 + 100 * n + 1000是O(n ** 2)。不要被大数值分心!

    39310

    2019面试题:请解释ArrayList和Vector区别?

    ArrayList没有同步。 size,isEmpty,get,set方法运行时常数。但是add方法开销分摊常数,添加n个元素需要O(n)时间。其他方法运行时线性。   ...添加数据使用put(key, value),取出数据使用get(key),这两个基本操作时间开销常数。...总结   如果涉及到堆栈,队列等操作,应该考虑用List,对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用ArrayList。   ...但是,如果在集合其他位置增加或移除元素那么花费时间会呈线形增长:O(n-i),其中n代表集合中元素个数,i代表元素增加或移除元素索引位置。为什么会这样呢?...O(1),但它在索引一个元素使用缺比较慢-O(i),其中i是索引位置.使用ArrayList也很容易,因为你可以简单使用索引来代替创建iterator对象操作

    56300

    「Java面试题精华集」1w字Java集合框架篇(2020最新版)附PDF版 !

    LinkedList 采用链表存储,所以对于add(E e)方法插入,删除元素时间复杂度不受元素位置影响,近似 O(1),如果是要在指定位置i插入和删除元素的话((add(int index,...是否支持快速随机访问: LinkedList 不支持高效随机元素访问, ArrayList 支持。快速随机访问就是通过元素序号快速获取元素对象(对应于get(int index)方法)。...为什么呢?我觉得还是和底层数据结构有关!ArrayList 底层是数组, LinkedList 底层是链表。数组天然支持随机访问,时间复杂度 O(1),所以称为快速随机访问。...并且 采用二进制位操作 &,相对于%能够提高运算效率,这就解释了 HashMap 长度为什么是 2 幂次方。...Java 8 在链表长度超过一定阈值(8)时将链表(寻址时间复杂度 O(N))转换为红黑树(寻址时间复杂度 O(log(N))) synchronized 只锁定当前链表或红黑二叉树首节点,这样只要

    1.3K20

    Java遍历集合几种方法分析(实现原理、算法性能、适用场合)

    不可以根据元素位置直接计算出内存地址,只能按顺序读取元素。读取一个特定位置元素平均时间复杂度O(n)。主要以链表代表。Java中以LinkedList代表。...所以我们可以知道,对于顺序存储,因为读取特定位置元素平均时间复杂度是O(1),所以遍历整个集合平均时间复杂度O(n)。...而对于链式存储,因为读取特定位置元素平均时间复杂度是O(n),所以遍历整个集合平均时间复杂度O(n2)(n平方)。 ArrayList按位置读取代码:直接按元素位置读取。 ?...类型集合来说,没有太多意义,反而因为一些额外操作,还会增加额外运行时间。...,这样一来,遍历整个集合时间复杂度就降低O(n); (这里只用LinkedList做例子)LinkedList迭代器,内部实现,就是维护当前遍历位置,然后操作指针移动就可以了:

    1K10

    16、Collection接口及其子接口Set和List(常用类LinkedListArrayList,Vector和Stack)

    此外LinkedList提供额外get,remove,insert方法在LinkedList首部或尾部。...ArrayList没有同步。size,isEmpty,get,set方法运行时常数。但是add方法开销分摊常数,添加n个元素需要O(n)时间。其他方法运行时线性。   ...通过get(int index)获取ArrayList第index个元素时。直接返回数组中index位置元素,不需要像LinkedList一样进行查找。...(03) 对于“单线程环境” 或者 “多线程环境,但List仅仅只会被单个线程操作”,此时应该使用非同步类(如ArrayList)。...(04) 对于“多线程环境,且List可能同时被多个线程操作”,此时,应该使用同步类(如Vector)。

    90200

    京东后端实习一面,凉凉。。

    LinkedList 时间复杂度 ①、由于 ArrayList 是基于数组实现,所以 get(int index) 可以直接通过数组下标获取,时间复杂度是 O(1);LinkedList 是基于链表实现...,get(int index) 需要遍历链表,时间复杂度是 O(n)。...当然,get(E element) 这种查找,两种集合都需要遍历通过 equals 比较获取元素,所以时间复杂度都是 O(n)。...②、ArrayList 如果增删是数组尾部,直接插入或者删除就可以了,时间复杂度是 O(1);如果 add 时候涉及到扩容,时间复杂度会提升到 O(n)。...,因为二者增删时间复杂度都是 O(n),都需要遍历列表;而是体现在增删效率上,因为 LinkedList 增删只需要改变引用, ArrayList 增删可能需要移动元素。

    35510

    ArrayListLinkedList、 Vector、Map 用法比较

    此外在LinkedList首部或尾部提供额外get、remove、insert方法。 这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)。...size、isEmpty、get、set方法运行时常数。但是add方法开销分摊常数,添加n个元素需要O(n)时间,其他方法运行时线性。...如果相同对象有不同hashCode,对哈希表操作会出现意想不到结果(期待get方法返回null),要避免这种问题,只需要牢记一条:要同时复写equals方法和hashCode方法,不要只写其中一个...但是,如果在集合其他位置增加或移除元素那么花费时间会呈线形增长:O(n-i),其中n代表集合中元素个数,i代表元素增加或移除元素索引位置。为什么会这样呢?...总结 如果涉及到堆栈、队列等操作,应该考虑用List; 对于需要快速插入,删除元素,应该使用LinkedList; 如果需要快速随机访问元素,应该使用ArrayList

    63030

    偷偷盘点一下京东研发岗薪资

    O(1);LinkedList 是基于链表实现get(int index) 需要遍历链表,时间复杂度是 O(n)。...当然,get(E element) 这种查找,两种集合都需要遍历通过 equals 比较获取元素,所以时间复杂度都是 O(n)。...②、ArrayList 如果增删是数组尾部,直接插入或者删除就可以了,时间复杂度是 O(1);如果 add 时候涉及到扩容,时间复杂度会提升到 O(n)。...如果是在链表头部插入或者删除,时间复杂度是 O(1);如果是在链表中间插入或者删除,时间复杂度是 O(n),因为需要遍历链表找到插入位置;如果是在链表尾部插入或者删除,时间复杂度是 O(1)。...,因为二者增删时间复杂度都是 O(n),都需要遍历列表;而是体现在增删效率上,因为 LinkedList 增删只需要改变引用, ArrayList 增删可能需要移动元素。

    67200

    Java集合篇之深入解析ArrayList,这六问你答上来吗?

    书接上回,我们开启了Java集合部分学习,今天我们就来看一下List,其中它核心有两个,一个ArrayList,一个LinkedListArrayList使用频率在集合中至少排第二,可以和HashMap...[] array = new int[]{1, 2, 3}; ArrayList底层是通过动态数组实现,长度动态可变,会自动扩容。...增加时间复杂度:添加一个元素(调用 add() 方法时)时间复杂度最好情况 O(1),最坏情况 O(n)。...删除时间复杂度:删除一个元素(调用 remove(Object) 方法时)时间复杂度最好情况 O(1),最坏情况 O(n)。...修改时间复杂度:修改一个元素(调用 set()方法时)与查询操作类似,可以直接根据索引来访问元素,时间复杂度 O(1)。 注:最好和最快情况分别是在列别尾部操作和头部或中间操作差距。

    10100

    大公司最喜欢问Java集合类面试题

    看了一些所谓大公司JAVA面试问题,发现对于JAVA集合类使用都比较看重似的,自己在这方面还真的是所真甚少,抽空也学习学习吧。...ArrayList没有同步。 size,isEmpty,get,set方法运行时常数。但是add方法开销分摊常数,添加n个元素需要O(n)时间。其他方法运行时线性。...添加数据使用put(key, value),取出数据使用get(key),这两个基本操作时间开销常数。...如果相同对象有不同hashCode,对哈希表操作会出现意想不到结果(期待get方法返回null),要避免这种问题,只需要牢记一条:要同时复写equals方法和hashCode方法,不要只写其中一个...总结 如果涉及到堆栈,队列等操作,应该考虑用List,对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用ArrayList

    44920

    JAVA集合类(大公司面试喜欢问)

    看了一些所谓大公司Java面试问题,发现对于JAVA集合类使用都比较看重似的,自己在这方面还真的是所真甚少,抽空也学习学习吧。...ArrayList没有同步。 size,isEmpty,get,set方法运行时常数。但是add方法开销分摊常数,添加n个元素需要O(n)时间。其他方法运行时线性。   ...添加数据使用put(key, value),取出数据使用get(key),这两个基本操作时间开销常数。...如果相同对象有不同hashCode,对哈希表操作会出现意想不到结果(期待get方法返回null),要避免这种问题,只需要牢记一条:要同时复写equals方法和hashCode方法,不要只写其中一个...总结   如果涉及到堆栈,队列等操作,应该考虑用List,对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用ArrayList

    48220

    集合框架

    此外LinkedList提供额外get,remove,insert方法在 LinkedList首部或尾部。...有size,isEmpty,get,set方法,运行时常数。但是add方法开销分摊常数,添加n个元素需要O(n)时间。其他方法运行时线性。...添加数据使用put(key, value),取出数据使用get(key),这两个基本操作时间开销常数。...如果相同对象有不同hashCode,对哈希表操作会出现意想不到结果(期待get方法返回null),要避免这种问题,只需要牢记一条:要同时复写equals方法和hashCode方法,不要只写其中一个...总结 如果涉及到堆栈,队列等操作,应该考虑用List,对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用ArrayList

    42350

    大公司最喜欢问Java集合类面试题

    此外LinkedList提供额外get,remove,insert方法在LinkedList首部或尾部。...ArrayList没有同步。 size,isEmpty,get,set方法运行时常数。但是add方法开销分摊常数,添加n个元素需要O(n)时间。其他方法运行时线性。...添加数据使用put(key, value),取出数据使用get(key),这两个基本操作时间开销常数。...如果相同对象有不同hashCode,对哈希表操作会出现意想不到结果(期待get方法返回null),要避免这种问题,只需要牢记一条:要同时复写equals方法和hashCode方法,不要只写其中一个...总结 如果涉及到堆栈,队列等操作,应该考虑用List,对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用ArrayList

    43130
    领券