java - 队列的两种常见实现之间有什么区别?

标签 java queue collections

在Java中,队列的一种实现是“循环数组”,另一种是“链表”。它们有什么区别?

最佳答案

就它们的使用方式而言,几乎没有任何区别,除非您达到队列的大小限制(我将在稍后解释...)

至于其他注意事项:

  • 链表方法很有优势,因为您无需额外努力即可动态调整队列的大小 - 这是链表的基础。当然,这可以通过重新分配数组来复制,但这不是最简单的方法。

  • 此外,在链表中,没有未使用的内存:在循环数组方法中,如果队列的大小小于数组的最大容量,就会出现“空槽”。然而,这并不意味着链表的内存效率更高,因为:

  • 循环数组方法的优点是没有开销。链表中的每个节点都需要存储对下一个节点的引用 - 如果列表变大,这就会加起来。另一方面,循环数组只是您通过索引访问的一 block 内存,因此没有开销。

每种方法都有利有弊,但实际上,这取决于它所使用的特定情况……除非您无休止地使用队列,否则它可能不会产生太大影响。

关于java - 队列的两种常见实现之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1123310/

相关文章:

java - 如何根据参数属性在 Mockito 中返回不同的值?

java - FileInputStream 不以 java 结尾

queue - TensorFlow 队列关闭后可以重新打开吗?

c - c中的迭代目录遍历

java - 我可以在迭代 HashTable 时更改其对象的内部结构吗?

laravel - 如何删除多维 Laravel 集合中的列?

java - 使用 Assets 从android中的文件中读取

java - 为什么 Palantir QS 3.8 无法识别其自己的 XML 导出?

ios - 停止或完全清除 iOS 全局调度队列

c# - 简化的集合初始化