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

我的应用程序中有许多队列和优先级队列。 我想轻松访问这些队列中的第n个项目,但是没有看到使用API​​执行此操作的简单方法。 我想我可以创建一个迭代器并迭代到第n个或使用toArray()[index] – 但似乎应该有一个更简单的方法。

我错过了什么吗?

我错过了什么吗?

是 – 通过索引访问元素不是队列概念的一部分。

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

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

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

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

您为Queues使用了哪些具体数据类型? LinkedList ?在这种情况下,您应该能够通过转换回链接列表来获取第n个元素。

但这不是你如何使用Queue

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

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

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