【问题标题】:Is there any case when a Stack or a Queue implementation with ArrayList gives better, faster performance then a LinkedList implemented in Java?在任何情况下,使用 ArrayList 的 Stack 或 Queue 实现比用 Java 实现的 LinkedList 提供更好、更快的性能?
【发布时间】:2016-08-15 03:32:48
【问题描述】:

Question 中,我读到了以下内容:

如果您执行的操作相对较少,即总共少于 1000 个左右的入队/出队,那么数组会更快,因为它在内存中是连续的。

我的问题是:在 Java 中缓存 ArrayList 是如何工作的?有没有这样的情况,ArrayList 实现的 Queue 或 Stack 比 Java 实现的 LinkedList 性能更好?

【问题讨论】:

    标签: java performance arraylist stack queue


    【解决方案1】:

    如果 ArrayList 实现的 Queue 或 Stack 比 Java 实现的 LinkedList 性能更好?

    当队列几乎总是为空或只有 1 个元素时,ArrayList 速度更快,产生的垃圾更少(即没有)

    如果你有一个快速的消费者,它几乎总是会消费生产者生产的任何东西。这意味着队列中通常有 0 或 1 个元素。在这些条件下,ArrayList 更快,因为它不会创建任何对象或产生垃圾。

    BTW ArrayDeque 是一个更好的选择,因为即使有超过 1 个元素,它也能很好地执行。

    在 Java 中缓存 ArrayList 的工作原理是什么?

    CPU 缓存访问 ArrayList 的方式没有什么特别之处。

    【讨论】:

    • 如果 Queue 或 Stack 几乎是空的或只有 1 个元素,我们可以称其为 Arraylist,或者基本上我们想要的任何内容,因为我们将使用 Array 进行添加和删除,其顺序无关紧要。我是对的,还是遗漏了什么?
    • @codeme 更重要的是 ArrayList 很慢,除非添加/删除最后一个元素,在这种情况下它比 Linkedlist 快。
    猜你喜欢
    • 2015-06-16
    • 2016-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-23
    相关资源
    最近更新 更多