如何获取队列中的第n个项目?

时间:2012-03-09 16:34:06

标签: java queue

我的应用程序中有许多队列和优先级队列。我想轻松访问这些队列中的第n个项目,但是没有看到使用API​​的简单方法。

我想我可以创建一个Iterator并迭代到第n个元素或使用toArray()[index],但似乎应该有一个更简单的方法。

我错过了什么吗?

5 个答案:

答案 0 :(得分:18)

  

我错过了什么吗?

是 - 按索引访问元素不属于队列概念的事实。

如果您需要按索引访问元素,则需要列表,而不是qeue。

答案 1 :(得分:2)

队列的整个点是仅向头部(第一个元素)公开访问。如果您想要对线性数据结构中的元素进行任意访问,请使用List(如果您执行的查找比推送/弹出更多,请考虑使用ArrayList作为LinkedList没有针对随机访问进行优化。)

答案 2 :(得分:2)

最简单的解决方案是使用自我平衡的binary search tree,例如AVL tree, splay tree or red-black tree。它允许您通过 O(log n)时间中的键访问元素,并按 O(log n + k)中的顺序遍历对象,其中k是迭代的元素数量.. !!

答案 3 :(得分:1)

  

我的应用程序中有许多队列和优先级队列

您对Queues使用的具体数据类型是什么?一个LinkedList?在这种情况下,您应该能够通过转换回链接列表来获取n元素。

但这不是你如何使用Queue

至于优先级队列,从您的问题看来,您似乎也没有使用正确的数据结构。

Priority Queue将始终返回min元素(通过排序) 那么这里的n元素是什么意思?n最小或n插入了什么?所以我们无法真正说明在这种情况下该做什么

答案 4 :(得分:1)

队列不允许按概念进行随机索引访问,因此接口不允许这样做是件好事。如果您需要同时进行这两种访问(这对设计来说是一个不好的标志),那么您可以使用同时实现ListQueue的数据类型(例如LinkedList)。< / p>