Java中ArrayList和LinkedList之间的区别
内容
ArrayList和LinkedList是 采集 类,并且它们都实现了 清单 接口。 ArrayList类创建列表,该列表内部存储在 动态 数组 随着元素的添加或删除,其大小会增加或缩小。 LinkedList还会创建内部存储在列表中的列表 怀疑地 已连结 清单。这两个类都用于存储列表中的元素,但是ArrayList和LinkedList这两个类之间的主要区别是: 数组列表 允许随机访问列表中的元素,因为它对 基于索引 数据结构。另一方面, 链表 不允许随机访问,因为它没有直接访问元素的索引,它必须遍历列表以从列表中检索或访问元素。
让我们借助下面显示的比较表来讨论ArrayList和LinkedList之间的更多区别。
- 比较表
- 定义
- 关键差异
- 结论
比较表
比较基础 | 数组列表 | 链表 |
---|---|---|
基本的 | 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中那样移动元素。但是访问速度较慢,因为它没有直接访问元素的索引。
- 由于ArrayList采用数组的基于索引的数据结构,因此可以随机访问ArrayList的列表实现。另一方面,由LinkedList实现的列表无法随机访问,因为要检索或访问列表中的特定元素,您必须遍历该列表。
- ArrayList用于存储列表元素的内部数据结构是 动态数组 随着列表中元素的添加或删除,元素可能会增长或收缩。但是,LinkedList用于在列表中存储元素的内部数据结构是 双链表.
- ArrayList扩展了 摘要清单 类,它也是一个Collection类,而LinkedList类扩展了 AbstractSequentialList 该类又是Collection类。
- ArrayList类实现 清单 接口,而LinkedList类实现 清单, 队列和 双端队列 接口。
- 从使用ArrayList实现的列表中访问元素是 快点 因为它具有基于索引的数据结构。另一方面,列表工具byLinkledList中没有基于索引的结构。因此,将迭代器应用于列表,以到达要访问的元素,从而进行访问 慢点 在LinkedList中。
- 操作是在使用ArrayList实现的列表中进行操作,因为每当从列表中添加或删除元素时,列表中的元素都会移动以适应更改。另一方面,在LinkedList实现的列表中操作更快,因为在从列表中添加或删除元素时不需要移动列表中的元素。
- ArrayList就像一个 清单 因为它实现了List接口,而LinkedList充当 清单 和 队列 因为它同时实现了List和Queue。
结论:
当频繁添加或删除列表中的元素时,必须使用LinkedList,因为它在处理过程中表现更好。如果对列表进行频繁搜索,则ArrayList是最佳选择,因为在访问列表中的元素时ArrayList的性能更好。