2013-02-05 29 views
7

我喜歡使用與迭代器原理圈,像如何確定使用迭代器時的最後一個元素?

for(String s : collectionWithStrings) 
    System.out.println(s + ", "); 

問:我怎樣才能確定當前的元素是最後一個?

int = 0; i < collection.size(); i++這樣的自己的索引這可能與i == collection.size() - 1,但不好。對於上面的例子,是否可以使用迭代器確定最後一個元素?

+0

號:

if(!iterator.hasNext()) { // this is the last element } 

通常情況下,我們反覆使用Iterator作爲如此。 – leonbloy

+0

增強型for-loop相當專業。它的工作是爲一些非常簡單但頻繁發生的案例提供一個非常簡短的代表。如果您無法從中獲得您想要的內容,請不要使用它。 –

回答

8

事實上,Iterator#hasNext方法返回一個布爾值,確定迭代器是否會用next方法返回另一個元素。

你的迭代可以把就象這樣:

Iterator<String> iterator = collectionWithString.iterator(); 
while(iterator.hasNext()) { 
    String current = iterator.next(); 
    // if you invoke iterator.hasNext() again you can know if there is a next element 
} 
+0

是的,但您無法使用上面顯示的增強型'for'循環訪問迭代器。 –

+0

@DuncanJones是的,但OP也詢問_是否也可以用上面的例子的迭代器確定最後一個元素?_ – Gamb

+0

對不起,我的錯! –

3

這是不可能與enhanced for loop沒有維護自己的櫃檯。說實話,當我選擇使用哪種類型的循環時,這是我決定的一個因素。

使用Iterator時,可以訪問hasNext()方法,該方法在處理最後一個元素時將返回false。

+0

謝謝。這也是我對循環類型的決定性因素。就目前而言,這將是我對未來的決定性因素。 :) –

5

只需使用hasNext方法。如果您想檢查的位置,切換到另一SYLE

while(iterator.hasNext()) { 
    Object obj = iterator.next(); 
} 
相關問題