我知道 List<String> list
的常规迭代器创建用法如下:
//Conventional-style
Iterator<String> iterator = list.iterator()
while(iterator.hasNext()){
String string = iterator.next();
//...further code goes here
}
然而,在Iterating through a Collection, avoiding ConcurrentModificationException when removing in loop的接受答案中,我遇到了这个不寻常的for
与 Iterator
循环使用:
//Unconventional for loop style
for (Iterator<String> iterator = list.iterator(); iterator.hasNext();) {
String string = iterator.next();
//...further code goes here
}
现在,我想知道:
- 这种非传统的风格是否会为每次迭代一遍又一遍地在集合上创建迭代器?或者它是某种特殊的智能 for 循环,它创建一次迭代器并重用它? 如果它每次都创建一个迭代器,难道不应该是一个性能问题吗?
- 我们能否将传统样式中的 while 循环行替换为
for(;iterator.hasNext();)
,如果我要使用for
仅循环?
PS:我很清楚在集合上使用增强的 for 循环。我正在考虑“安全”删除元素的意图,而不会导致 ConcurrentModificationException
.
最佳答案
你称之为“非常规”的成语实际上是推荐的,因为它将迭代器变量的范围限制在使用它的循环中。
迭代器在循环开始之前创建一次。这是根据
for
循环的一般语义得出的,我热烈建议您熟悉它。可以,但不建议您这样做。这样的习语将是对
while
习语的毫无意义的混淆。
最后,请注意,对于 99% 的用例,上述所有内容都没有实际意义,因为您确实应该使用增强的 for 循环或 Java 8 forEach
。
关于java - 非常规使用 Iterator 迭代集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31626307/