ArrayList和LinkedList时间、空间复杂度对比

时间复杂度

查询

对于存储相同列表的ArrayList和LinkedList来说,ArrayList内部的实现是基于对象数组,而LinkedList是基于指针链表,ArrayList的查询是基于二分查找算法,LinkedList是不支持快速随机访问。所以,查询,ArrayList的速度是快鱼LinkedList的

插入和删除

当有元素插入和删除ArrayList时,该元素其后的元素都会进行移动,这就会造成移动会复制元素上的大量开销。相反的是,将元素插入或删除LinkedList只是简单的将该元素前后元素的next和previous节点进行修改即可

空间复杂度

LinkedList内部类是一个元素对象和上下节点,而ArrayList扩容是根据公式:新容量 = (旧容量*3 )/2 + 1,也就是每次容量大约会增加50%,如果用不完这50%,就会浪费很多空间。
所以,ArrayList在空间浪费上是大于LinkedList的。

总结

ArrayList是线性表(数组)
get()直接读取几个下标,时间复杂度O(1)
add(index,E)添加元素,其后元素需要移动,复杂度O(n)
remove()删除元素,其后元素逐个移动,复杂度O(n)

LinkedList是链表
get()获取第几个元素,依次遍历,复杂度O(n)
add(index,E)添加元素,修改前后元素的next和previous节点,复杂度O(1)
remove()删除元素,直接指向指针操作,复杂度O(1)

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: ArrayListLinkedList时间复杂度如下: 1. ArrayList时间复杂度: - 插入和删除操作的时间复杂度为O(n),因为需要移动其他元素。 - 随机访问的时间复杂度为O(1),因为可以通过索引直接访问元素。 2. LinkedList时间复杂度: - 插入和删除操作的时间复杂度为O(1),因为只需要修改相邻节点的指针。 - 随机访问的时间复杂度为O(n),因为需要遍历链表找到对应的节点。 因此,如果需要频繁进行随机访问操作,建议使用ArrayList;如果需要频繁进行插入和删除操作,建议使用LinkedList。 ### 回答2: 在Java世界中,ArrayListLinkedList是两种非常常见的数据结构,它们都可以用于存储和操作一系列对象。不过,它们的实现方式有所不同,因此它们的时间复杂度也有所不同。 ArrayList是一种基于数组实现的数据结构,它的特点是可以支持随机访问和快速读取操作。这意味着,如果你需要经常读取数据或者随机访问数据,就应该选择使用ArrayListArrayList底层的实现方式是创建一个数组,并使用该数组来存储数据。在插入元素时,如果数组已经被分配满了,就会重新分配一个更大的数组。这就导致了,当元素数量增加时,插入或删除一个元素可能会导致整个数组的重新分配。因此,在需要经常进行插入或删除操作的场合,ArrayList的效率就会变得较低。下面是ArrayList时间复杂度: - 随机访问O(1) - 插入/删除O(n) 相比之下,LinkedList采用的是链表的数据结构,它适合于需要经常进行插入或删除操作的场合。LinkedList的底层实现是一个双向链表,每个节点都存储一个元素,还包含指向前一个和后一个节点的指针。在插入或删除一个元素时,只需要改变该元素前后节点的指针即可,而不需要像ArrayList一样重新分配整个数组。但是,由于LinkedList不支持随机访问,因此需要遍历链表来查找某个元素,这就导致了它的效率比ArrayList低。下面是LinkedList时间复杂度: - 随机访问O(n) - 插入/删除O(1) 总之,ArrayListLinkedList各有优势,你需要根据具体场合选择合适的数据结构。 ### 回答3: ArrayListLinkedList都是Java中的常用集合类。两者都可以存储元素,并提供添加、删除、遍历等操作。然而,两者之间的时间复杂度存在差异。 ArrayList是基于数组实现的列表,它的内部实现使用了动态数组,当数组元素不足时会自动扩容。因此,ArrayList支持随机访问,可以在O(1)的时间复杂度内访问任意元素。在插入或删除元素的过程中,需要移动其他元素,因此这些操作的时间复杂度为O(n)。 LinkedList是基于链表实现的列表,它的每个节点包含指向前一个和后一个节点的指针。因此,LinkedList不支持随机访问,只能通过遍历链表来访问元素。在插入或删除元素的过程中,只需要修改相邻节点的指针,因此这些操作的时间复杂度为O(1)。 综上所述,ArrayList适用于随机访问和频繁的读取操作,而LinkedList适用于插入和删除操作频繁的情况。在使用时需要根据具体的需求进行选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值