数组和链表



我想了解数组和链表。 如果您尝试对数组和链表中的元素进行排序,则速度更快。 哪个列表索引数组或链表更快? 最后一件事,如果我们尝试从数组和链表中查找元素,这将花费更少的时间来找到相应的元素?我对数组和链表知之甚少。如果我错了,请纠正我。数组是固定大小和连续的内存数据结构。而链表不是固定大小。

来自 SCJP 认证书:

数组列表:

将其视为一个可增长的数组。它为您提供快速迭代和快速 随机访问。显而易见:它是一个有序集合(按索引),但不是 排序。您可能想知道,从版本 1.4 开始,ArrayList 现在实现了 新的 RandomAccess 接口 — 标记接口(意味着它没有方法) 也就是说,"此列表支持快速(通常是恒定时间)随机访问。选择 当您需要快速迭代但不太可能执行 大量插入和删除

链接列表:

LinkedList 按索引位置排序,与 ArrayList 一样,除了 这些元素彼此具有双重联系。这种联系为您提供了新的 用于添加和删除的方法(超出从列表界面获取的方法) 从开始或结束,这使得它成为实现堆栈的简单选择 或队列。请记住,LinkedList 的迭代速度可能比 ArrayList 慢, 但是,当您需要快速插入和删除时,这是一个不错的选择。从Java 5开始, LinkedList 类已得到增强,可以实现 java.util.Queue 接口。如 因此,它现在支持常见的队列方法: peek()、poll() 和 offer()

ArrayList

表示为一个数组,但是 ArrayList 类正在执行所有操作,包括调整数组大小,因此您不必关心大小。

Add to end : constant time
Add to else : linear time (average is n/2 = O(n))
Get : constant
Delete : same as add
链表

表示为链表。这意味着链表的每个部分都可以访问下一部分和之前的部分。

Add to anywhere : constant time
Delete from anywhere : constant time
Get : linear time (average is n/2 = O(n))

但两者都是列表,这意味着它们不是固定的。唯一的区别是,当您使用它们时,与其他 List 实现相比,某些方法比其他方法更快/更慢。

对于所有这些操作,数组都更快。链表更快的唯一时间是您需要删除或添加元素时。但是对于固定的项目集合,数组总是更快。

相关内容

  • 没有找到相关文章

最新更新