0

我正在阅读 Kathy sierra 的 OCP8 指南,发现一行内容如下:

“ArrayDeque 就像一个性能更好的 ArrayList”

现在我对在哪里使用ArrayList和在哪里使用感到困惑ArrayDeque。我也知道 ArrayDeque 的大小总是调整为 2 的幂。调整大小时,容量会翻倍,因此在某些情况下这可能会影响性能。但我想知道两者之间哪个更可取。非常感谢您的帮助。

4

1 回答 1

1

我建议在以下情况下使用 ArrayList 而不是 ArrayDeque

  1. 如果您需要按索引访问元素并且只需要在末尾插入/删除,请使用 ArrayList。
  2. 将 ArrayDeque 用作堆栈、队列或双端队列。

两个集合中的插入和删除。

数组列表:

最坏情况 O(n) 因为您必须移动元素。最后的插入/删除更快,因为要移动的元素更少。如果在 Arraylist 已满时插入,则必须将元素复制到一个新的更大的数组中,即 O(n)。

  • 在 ArrayList 末尾插入需要分摊的常数时间。这意味着在最初为空的 ArrayList 中的 n 次插入序列的最坏情况运行时间为 O(n),因此每次插入的平均运行时间为 O(1),尽管有些插入可能更慢。这是通过始终将数组大小增加一个常数因子来实现的,因为复制的元素总数是几何级数的总和。

数组队列:

  • 前面或后面的删除是O(1),前面或后面的插入需要摊销的常数时间。JCF 实现不允许按索引插入/删除(如果允许,由于移位,最坏的情况是 O(n))。
  • 数组双端队列没有容量限制,它们会根据需要增长以支持使用。
  • 它们不是线程安全的,这意味着在没有外部同步的情况下
  • ArrayDeque 中禁止使用 Null 元素。

现在答案在你的问题中。它完全取决于您的要求。分析后您可以轻松预测。

更多请看一下

于 2020-02-13T06:09:39.303 回答