2012-07-23 127 views
0

我有一個非常基本的Java迭代器的場景......在我面臨尋找迭代器的Java迭代器值sustaination

迭代logIterator將有兩個while循環相同的值的工作下面的問題,或者它會在第二個while循環中結束並變爲null。

Set logSet=transactionLogMap.entrySet(); 
Iterator logIterator=logSet.iterator(); 
BigDecimal tempRegId=null; 

while (logIterator.hasNext()) { 
    tempRegId=(BigDecimal)logIterator.next(); 
} 

if (someBoolean) { 
    while (logIterator.hasNext()) { 
     callsomeMethod(logIterator.next()); 
    } 
} 
+3

你爲什麼不幫你檢查一下看看? – 2012-07-23 15:58:41

回答

1

它會在第二個循環之前結束,但它不會變爲空。

它會立即falselogIterator.hasNext()

+0

感謝您的迅速答覆...本傑明 – ashwinsakthi 2012-07-23 15:59:51

1

這些將是不同的值。你的第二個循環返回false

Iterators允許呼叫者具有良好定義的語義

+0

感謝您的迅速答覆... thinkstep – ashwinsakthi 2012-07-23 16:00:13

0

你只是重複使用舊的迭代器迭代過程中刪除底層集合元素。一旦它返回truehasNext(),他將繼續這樣做。你不會進入你的第二個循環。

除此之外,學會使用新for構建

for(BigDecimal tempRegId : transactionLogMap.entrySet() { 
} 
+0

for(Entry tempRegId:transactionLogMap.entrySet()){ – ashwinsakthi 2012-07-23 16:04:28

+0

因爲你說的那個拋出一個異常。 – ashwinsakthi 2012-07-23 16:04:51

+0

它對密鑰集有效 – ashwinsakthi 2012-07-23 16:06:14