2013-08-06 48 views
0
Queue<Transaction> collection = new Queue<Transaction> 

迭代通过数据结构(队列,栈,袋)

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

从我对象的理解,它看起来像我们刚创建的对象,队列,数据类型的交易(类型参数)收集是对该对象的引用。正确?

然后,第二位代码是让我困惑的。我们循环打印队列中的内容,但我不确定我是否理解这是如何工作的。收集点指向交易类型的队列。看起来我们正在为对象Transaction创建一个引用t,并且使用它来引用集合。很困惑。

回答

1

请参阅http://docs.oracle.com/javase/7/docs/api/java/util/Queue.html。队列是Java集合框架的一部分,因此实现了Iterable接口。 for-each快捷方式使用该事实并利用Queue生成的迭代器对象遍历所有元素。 这相当于:

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

我认为这解释了它最好 – user2644819

2

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

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

1

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

2

的“的for-each”表示法由该最终类文件实际上代替:

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

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

0

对于for(Transaction t: collection)阅读:

每笔交易中收集

对于事务T在集合