2012-07-23 84 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