Iterator和for循环的用例是什么(不是每个循环)
请举例解释。
答案 0 :(得分:3)
除了迭代器在获取它之前可以检查是否存在下一个元素(hasNext()
)之外,它还可以从集合中删除元素。如果你在一个循环中运行并尝试删除一个元素 - 那么“next”元素应该是什么?
Iterator接口(及其子接口)实现提供了一种简单,安全,失败快速的非同步机制,可以修改和迭代集合。它节省了自己实现它的样板,并为开发人员提供了一个高效且无错误的工具。
Foreach循环由迭代器实现,所以通过使用它你没有做任何不同的事情 - 当你需要的只是一个简单的“只读”迭代时,它是一个很好的工具。
答案 1 :(得分:1)
你不喜欢简约吗?当你被介绍关闭主题时,你会怎么说?你会避开它,就像你避开基于收集的循环一样吗?
代码越“紧凑”,就越容易理解,从而更容易维护。
for(String each : anArrayList){
// do something
}
for(int i = 0; i < anArrayList.size(); i++){
// do something
}
第一个使用迭代器,而第二个使用更多'传统'for循环。程序员想要做的事情在第一个中变得更加清晰。此外,它更容易理解。
此外,你不只是遍历,你可以在迭代时做很多事情。就像从集合中删除一个元素一样,将它添加到另一个集合中,对它执行计算等等......
SSCCE:
import java.util.Iterator;
import java.util.List;
import java.util.Vector;
public class AnIterator {
public static void main(String[] args) {
List<String> list1 = new ArrayList<>();
List<String> list2 = new ArrayList<>();
list1.add("One");
list1.add("Two");
list1.add("Three");
list1.add("Four");
list1.add("Five");
Iterator it = list1.iterator();
while(it.hasNext()){
String next = (String) it.next();
String temp = next.toLowerCase();
char x = temp.charAt(0);
if(x == 'a' || x == 'e' || x == 'i' || x == 'o' || x == 'u'){
it.remove();
list2.add(next);
}
}
System.out.println("Vowels: " + list2);
System.out.println("Consonants: " + list1);
}
}
SSCCE显示了如何使用Iterator
从集合中删除元素。比传统的循环更容易理解吗? =)
与此对比:
for(int i = 0; i < list1.size(); i++){
String element = list1.get(i);
String temp = element.toLowerCase();
// same logic goes here
}
迭代器更优雅?
答案 2 :(得分:1)
如果一个类是可迭代的,那么我们知道我们可以得到一个迭代器并使用所述迭代器来浏览数据结构。我们不需要知道类的外观或工作原理等等。我们需要知道的是迭代器的方法。
答案 3 :(得分:1)
For
循环只是为了减少代码大小和代码可读性。
for(Iterator<Integer> iter = list.iterator(); iter.hasNext(); )
{
int nextInt = iter.next();
if(nextInt==0)
{
iter.remove();
}
}
答案 4 :(得分:1)
据我所知,foreach循环使用内部迭代器。
这对您来说也很有趣:Performance of traditional for loop vs Iterator/foreach in Java