按顺序循环访问对象队列

2022-09-03 01:42:56

我创建了一个包含对象的队列,我想按照它们在队列中放置的顺序进行迭代(第一个对象放在队列中,第二个对象放在队列中,第三个对象...

我看到了一种在线执行此操作的方法,但我不确定这是否能保证队列中的对象将以正确的顺序被访问?

for(MyObject anObject : queue){
    //do someting to anObject...

感谢您的帮助。


答案 1

将您的队列实现为链接列表。然后,您可以按插入对象的顺序循环访问对象。您必须声明要插入到队列中的对象的类型,这样您就不会收到任何错误。您可以将其保留为对象并将其指定为对象队列,然后上面的代码将起作用。见下文。

Queue<Object> queue = new LinkedList<Object>();
// add your objects here
// EX: queue.add(new MyObject)

for(Object item : queue){
    System.out.println(item.toString());
}

答案 2

这取决于您使用的实现。Queue

例如,保证迭代将按 FIFO(插入)顺序返回元素。这是因为它实现了 Deque 接口LinkedList

但一般来说,其他类型的队列不一定是这种情况。

队列的 javadoc 声明:

队列通常(但不一定)以 FIFO(先进先出)方式对元素进行排序。例外情况包括优先级队列,它根据提供的比较器对元素进行排序,或者元素的自然排序,以及LIFO队列(或堆栈),它对元素进行排序LIFO(后进先出)。

它还添加了:

每个队列实现都必须指定其排序属性。

因此,您只需要检查您正在使用的特定队列的javadoc,您应该找到答案。