2013-08-06 50 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在集合