0
Queue<Transaction> collection = new Queue<Transaction>

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

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

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

4

5 回答 5

2

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

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

于 2013-08-06T11:03:34.680 回答
2

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

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

这只是获得一个迭代器,并t在每次循环中设置等于迭代器的下一个值。这可以通过任何实现Iterable.

于 2013-08-06T11:05:30.037 回答
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);
}
于 2013-08-06T11:10:35.230 回答
1

这里发生的是Queue有一个iterator()方法。当你把它喂给foreach-loop你在这里做的事情时,你正在调用一个迭代器对象。接下来,for 循环开始遍历该迭代器中的对象。

于 2013-08-06T11:04:41.217 回答
0

for(Transaction t: collection)阅读:

对于集合中的每个事务

或者

对于 Transaction t over collection

于 2013-08-06T11:09:10.657 回答