通过数据结构(队列,堆栈,包)进行迭代

时间:2013-08-06 11:01:05

标签: java generics data-structures queue

Queue<Transaction> collection = new Queue<Transaction>

for(Transaction t: collection)
{ StdOut.println(t); }

根据我对对象的理解,看起来我们刚刚创建了一个数据类型事务(类型参数)的对象,队列,而collection是对该对象的引用。正确?

然后第二位代码让我感到困惑。我们正在循环打印队列中的什么,但我不确定我是否理解这是如何工作的。集合指向Transaction类型的队列。看起来我们正在创建一个对象Transaction的引用,并用它做一些参考集合。很困惑。

5 个答案:

答案 0 :(得分:2)

这是java用于处理迭代器的语法糖。队列实现Iterable接口。 for循环要求collection的迭代器并知道如何处理它。

对于实现Iterable的每个类,您可以使用此语法。

答案 1 :(得分:2)

在最终的类文件中,“for-each”符号实际上被替换为:

for(Iterator i = collection.iterator(); iterator.hasNext(); Transaction t = iterator.next())

这只是获取一个迭代器,并且每次通过循环时将t设置为等于迭代器的下一个值。这可以通过实现Iterable的任何对象来完成。

答案 2 :(得分:1)

这里发生的事情是Queueiterator()方法。当你将它提供给foreach-loop时就像你在这里一样,你正在调用一个迭代器对象。接下来,for循环开始迭代该迭代器中的对象。

答案 3 :(得分:1)

http://docs.oracle.com/javase/7/docs/api/java/util/Queue.html。 Queue是Java Collection Framework的一部分,因此实现了Iterable接口。 for-each快捷方式使用该事实并利用Queue生成的Iterator对象来迭代所有元素。 它相当于:

Iterator<Transaction> I = collection.iterator();
for(;;I.hasNext()) {
  Transaction t = I.next();
  StdOut.println(t);
}

答案 4 :(得分:0)

for(Transaction t: collection)读取:

对于集合中的每个交易

用于收集交易