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

最佳答案

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

至于其他注意事项:


链表方法是有利的,因为您可以毫不费力地动态调整队列大小-这是链表的基础。当然,可以通过重新分配数组来复制它,但这并不是最简单的方法。
另外,在链表中,没有未使用的内存:在循环阵列方法中,如果队列的大小小于阵列的最大容量,则将有“空插槽”。但是,这并不意味着链表的内存使用效率更高,因为:
圆形阵列方法的优点是没有开销。链表中的每个节点都需要存储对下一个节点的引用-如果列表变大,这将加起来。另一方面,循环数组只是您通过索引访问的一块内存,因此没有开销。


每种方法都有优点和缺点,但是实际上,这取决于它所使用的特定情况……并且,除非您无休止地使用队列,否则可能不会有太大的区别。

07-24 15:36