Java中ArrayList和LinkedList之间的区别

作者: Laura McKinney
创建日期: 3 四月 2021
更新日期: 15 可能 2024
Anonim
【Java面试题】ArrayList和LinkedList区别
视频: 【Java面试题】ArrayList和LinkedList区别

内容


ArrayList和LinkedList是 采集 类,并且它们都实现了 清单 接口。 ArrayList类创建列表,该列表内部存储在 动态 数组 随着元素的添加或删除,其大小会增加或缩小。 LinkedList还会创建内部存储在列表中的列表 怀疑地 已连结 清单。这两个类都用于存储列表中的元素,但是ArrayList和LinkedList这两个类之间的主要区别是: 数组列表 允许随机访问列表中的元素,因为它对 基于索引 数据结构。另一方面, 链表 不允许随机访问,因为它没有直接访问元素的索引,它必须遍历列表以从列表中检索或访问元素。

让我们借助下面显示的比较表来讨论ArrayList和LinkedList之间的更多区别。

  1. 比较表
  2. 定义
  3. 关键差异
  4. 结论

比较表

比较基础数组列表链表
基本的 ArrayList允许随机访问列表中的元素。LinkedList不允许随机访问列表中的元素。
数据结构用于存储元素的内部结构是动态数组。用于存储元素的内部结构是双链表。
延伸ArrayList扩展了AbstarctList类。LinkedList扩展了AbstractSequentialList。
机具AbstractList实现List接口。LinkedList实现列表,双端队列和队列。
访问 在ArrayList中,可以更快地访问列表中的元素。在LinkedList中,访问列表中元素的速度较慢。
操纵在ArrayList中,对列表中元素的操作较慢。在LinkedList中,对列表中元素的操作更快。
行为ArraylList在实现list时表现为List。LinkedList在实现List和Queue的同时,也像List一样表现良好。


ArrayList的定义

摘要清单 类由 收集框架。它延伸 绝对列表 并实施 清单 接口。 ArrayList的用途 动态数组 即可变长度的数组作为内部数据结构,用于将元素存储在列表中。由于java中的数组长度固定,因此需要ArrayList。因此,当元素从数组中添加或删除时,它的大小不能增加或缩小。因此,您必须事先知道所需数组的大小。但是,使用ArrayList类实现的数组列表会随着在数组中添加或删除元素而增大和缩小。

可以访问使用ArrayList实现的数组列表 随机地 因为ArrayList基于索引进行操作。因此,知道索引就可以直接访问列表的元素。 ArrayList有三个构造函数:

ArrayList()ArrayList(Collection <?扩展E> c)ArrayList(int容量)

第一 构造函数实现一个空数组列表。的 第二 构造函数实现使用初始化的数组列表 集合c 元素。的 第三 构造函数使用 容量 参数中提供。使用ArrayList有时,您将需要将Collection ArrayList转换为数组。可以通过调用 toArray().

LinkedList的定义

像ArrayList一样 链表 也是 采集 课堂使用 双链表 作为内部数据结构来存储列表中的元素。 LinkedList类扩展 AbstractSequentialList 并实现 清单, 双端队列队列 接口。使用LinkedList实现的链表不能被随机访问。如果要从列表中检索任何元素,则必须迭代列表以搜索该元素。


LinkedList类中有两个构造函数。

LinkedList()LinkedList(Collection <?扩展E> c)

第一 构造函数创建一个空的链表。的 第二 构造函数创建一个链表,用以下元素初始化 采集 C.

在LinkedList中,列表的操作既简单又快速。这是因为,如果您添加或删除列表中的任何元素,则无需像ArrayList中那样移动元素。但是访问速度较慢,因为它没有直接访问元素的索引。

  1. 由于ArrayList采用数组的基于索引的数据结构,因此可以随机访问ArrayList的列表实现。另一方面,由LinkedList实现的列表无法随机访问,因为要检索或访问列表中的特定元素,您必须遍历该列表。
  2. ArrayList用于存储列表元素的内部数据结构是 动态数组 随着列表中元素的添加或删除,元素可能会增长或收缩。但是,LinkedList用于在列表中存储元素的内部数据结构是 双链表.
  3. ArrayList扩展了 摘要清单 类,它也是一个Collection类,而LinkedList类扩展了 AbstractSequentialList 该类又是Collection类。
  4. ArrayList类实现 清单 接口,而LinkedList类实现 清单, 队列双端队列 接口。
  5. 从使用ArrayList实现的列表中访问元素是 快点 因为它具有基于索引的数据结构。另一方面,列表工具byLinkledList中没有基于索引的结构。因此,将迭代器应用于列表,以到达要访问的元素,从而进行访问 慢点 在LinkedList中。
  6. 操作是在使用ArrayList实现的列表中进行操作,因为每当从列表中添加或删除元素时,列表中的元素都会移动以适应更改。另一方面,在LinkedList实现的列表中操作更快,因为在从列表中添加或删除元素时不需要移动列表中的元素。
  7. ArrayList就像一个 清单 因为它实现了List接口,而LinkedList充当 清单队列 因为它同时实现了List和Queue。

结论:

当频繁添加或删除列表中的元素时,必须使用LinkedList,因为它在处理过程中表现更好。如果对列表进行频繁搜索,则ArrayList是最佳选择,因为在访问列表中的元素时ArrayList的性能更好。