Java 我们可以用ArrayQue替换ArrayList以获得更好的性能吗?

Java 我们可以用ArrayQue替换ArrayList以获得更好的性能吗?,java,arraylist,arraydeque,Java,Arraylist,Arraydeque,我正在阅读凯西·塞拉的《OCP8指南》,发现有一行写着: “ArrayQue就像一个性能更好的ArrayList” 现在我对在哪里使用ArrayList和在哪里使用ArrayDeque感到困惑。 我还知道ArrayDeque的大小总是调整为2的幂。在调整大小时,容量增加了一倍,因此在某些情况下可能会影响性能。但我想知道两者之间哪一个更好。 非常感谢您的帮助。我建议在以下情况下使用ArrayList而不是ArrayQue 如果您需要按索引访问元素,并且只需要 需要在末尾插入/删除 将ArrayQu

我正在阅读凯西·塞拉的《OCP8指南》,发现有一行写着:

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

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

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

  • 如果您需要按索引访问元素,并且只需要 需要在末尾插入/删除
  • 将ArrayQue用作堆栈、队列或数据块
  • 在两个集合中插入和删除

    阵列列表:

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

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

    • 前面或后面的删除是O(1),前面或后面的插入是O(1) 回用固定时间摊销。JCF实现不支持 允许按索引插入/删除(如果允许,则为 最坏情况O(n),因为换档)
    • 阵列DEQUE没有容量限制,它们会根据需要增长 以支持使用
    • 它们不是线程安全的,这意味着 缺少外部同步
    • ArrayQue中禁止使用Null元素
    现在答案就在你的问题里。这完全取决于你的需求。分析后你很容易预测


    有关更多信息,请使用

    如果您需要按索引访问元素,并且只需要在末尾插入/删除,请使用ArrayList。但如果我们需要在末尾插入,LinkedList比ArrayList更可取。@Codeninja完全正确,但您需要遍历整个链表。但您可以使用索引方法进行插入