Java 中 LinkedList 与 ArrayList 的区别?
LinkedList
和 ArrayList
都实现了 List 接口,但它们在内部的工作方式是不同之处。 ArrayList 和 LinkedList 之间的主要区别在于 ArrayList 使用可调整大小的数组实现,而 LinkedList 使用双重 LinkedList 实现。 ArrayList 在 Java 程序员中比 LinkedList 更受欢迎,因为在很少情况下 LinkedList 是比 ArrayList 更合适的集合。 在本文中,我们将看到 LinkedList 和 ArrayList 之间的一些差异,并尝试找出 何时何地使用 LinkedList 而不是 ArrayList。
Java 中的 LinkedList 与 ArrayList
LinkedList 和 ArrayList 之间的所有差异都源于 Array 和 LinkedList 数据结构之间的差异。 如果大家熟悉 Array 和 LinkedList 数据结构,那么很可能会得出它们之间的以下区别:
-
由于 Array 是基于索引的数据结构,因此使用索引从 Array 中搜索或获取元素非常快。 Array 为
get(index)
方法提供了 O(1) 性能,但是在 ArrayList 中移除是昂贵的,因为需要重新排列所有元素。 另一方面,LinkedList 不提供随机或基于索引的访问,我们需要遍历链表以检索O(n)
阶的任何元素。 -
与 ArrayList 相比,LinkedList 中的插入操作简单且快速,因为如果数组变满,则不存在调整数组大小和将内容复制到新数组的风险,这使得在最坏的情况下添加到
O(n)
的 ArrayList 中,同时添加 是Java中 LinkedList 中的O(1)
操作。 如果我们在数组末尾以外的任何地方插入内容,ArrayList 也需要更新其索引。 - 与 ArrayList 相比,删除在 LinkedList 中更像是插入。
- LinkedList 比 ArrayList 有更多的内存开销,因为在 ArrayList 中每个索引只保存一个实际对象(数据),但在 LinkedList 的情况下,每个节点都保存数据和下一个和上一个节点的地址。
何时在 Java 中使用 LinkedList 和 ArrayList
正如我们所说,LinkedList 不如 ArrayList 流行,但在某些情况下,LinkedList 是比 Java 中的 ArrayList 更好的选择。 如果出现以下情况,请在 Java 中使用 LinkedList:
-
我们的应用程序可以在没有随机访问的情况下生存。 因为如果你需要 LinkedList 中的第 n 个元素,你需要先遍历到第 n 个元素
O(n)
然后从该节点获取数据。 - 你的应用程序是更多的插入和删除驱动程序,你插入或删除的不仅仅是检索。 由于插入或移除不涉及调整大小,它比 ArrayList 快得多。
这就是 Java 中 ArrayList 和 LinkedList 之间的区别。 在需要非同步的基于索引的访问的所有情况下,使用 Java 中的 ArrayList。 ArrayList 快速且易于使用,只需尝试通过构造具有适当初始大小的 ArrayList 来最大程度地减少数组大小调整。
相关文章
Do you understand JavaScript closures?
发布时间:2025/02/21 浏览次数:108 分类:JavaScript
-
The function of a closure can be inferred from its name, suggesting that it is related to the concept of scope. A closure itself is a core concept in JavaScript, and being a core concept, it is naturally also a difficult one.
Do you know about the hidden traps in variables in JavaScript?
发布时间:2025/02/21 浏览次数:178 分类:JavaScript
-
Whether you're just starting to learn JavaScript or have been using it for a long time, I believe you'll encounter some traps related to JavaScript variable scope. The goal is to identify these traps before you fall into them, in order to av
How much do you know about the Prototype Chain?
发布时间:2025/02/21 浏览次数:150 分类:JavaScript
-
The prototype chain can be considered one of the core features of JavaScript, and certainly one of its more challenging aspects. If you've learned other object-oriented programming languages, you may find it somewhat confusing when you start
如何在 JavaScript 中合并两个数组而不出现重复的情况
发布时间:2024/03/23 浏览次数:86 分类:JavaScript
-
本教程介绍了如何在 JavaScript 中合并两个数组,以及如何删除任何重复的数组。