我应该使用什么类型的阻止队列?

时间:2011-12-14 13:19:21

标签: java data-structures collections queue

我想实现一个阻止,我可以随时添加元素,无论如何。但我必须能够顺序访问它们。

例如,考虑添加了元素1,4,8,10的x元素队列。因此可以访问10,但是直到9被添加和访问,8不能。简而言之,所有元素都是相互关联的。

如果java已经实现了这种类型的集合,请告诉我。所以我可以直接使用它。

2 个答案:

答案 0 :(得分:1)

您正在谈论堆栈或队列,具体取决于您是希望它们是FIFO还是LIFO,并且首先以数字顺序插入元素 - 这意味着您'在插入时对元素进行排序,使它们始终处于正确的数字顺序。

通过排序时按数字顺序对元素进行排序,可以保证它们在您删除它们时会按照预期的顺序排列。

您可以使用Java的LinkedList在列表中插入您想要它们的元素,也可以根据需要从列表的“后面”或“前面”删除它们。

最后,为了确保您不能删除项目,除非它是序列中的下一个项目,您需要在从列表中删除它之前简单地检查该值,以确保它是顺序的下一个项目 后删除最后一个元素。如果它没有通过该标准,则返回“false”或其他一些值,表示此时无法从列表中删除任何内容。

另外,请查看这个问题:Creating a blocking Queue<T> in .NET? - 它不是Java,但它非常相似,可能会提供一些见解。

答案 1 :(得分:0)

Wrap Queue包含按顺序将项目推送到它的逻辑。例如。创建一个实现Queue和BlockingQueue的类。大多数方法(如get)直接委托给内部ArrayBlockingQueue,但“put”会将内容按顺序放入内部ArrayBlockingQueue。如果使用无法访问的元素调用put,则将其存储在另一个中间数据结构中。

每次使用“next up”元素调用put时,将其推送到队列,然后浏览中间数据结构并将任何元素添加到现在可以添加的队列中。

相关问题