如果我运行以下代码,它将打印3次重复,但是当我在while循环中删除if语句时(只是为了查看它将迭代多少次),它会启动一个无限循环。
这个{{1}}方法实际上是如何工作的?我认为这将只迭代5次,因为我在列表中有5个项目。
{{1}}
答案 0 :(得分:8)
这很简单,实际上
while(iterator.hasNext()){
if(collection2.contains(iterator.next()))
System.out.println("duplicate");
}
想象一下,迭代器是指向列表元素的指针。
当你致电next()
时,你将这个指针向前移动一步。
如果你不移动指针,hasNext()
将永远为真,因为你仍然在列表的开头。
所以你必须调用迭代器的next()
,直到列表中没有剩余的元素。
答案 1 :(得分:1)
如果删除if语句,那么它会进入无限循环,因为iterator.next()
处于if条件。实际上iterator.next()
是移动指针的api,而不是hasNext()
。 hasNext()
只检查集合中是否有任何元素。由于删除if语句也删除了hasNext
api,因此指向集合的指针不会移动,hasNext
始终返回true。
如果从if条件中取出iterator.next()
并将其移到if条件之上,那么即使删除if语句,循环也会迭代5次。
Iterator<String> iterator = collection1.iterator();
while(iterator.hasNext()){
String currentColor = iterator.next();
if(collection2.contains(currentColor)){
System.out.println("duplicate");
}
}
答案 2 :(得分:0)
The question why Iterator is important/introduced is simple:
consider following example:
List<String> list = new ArrayList<String>();
list.add("Anurag");
list.add("Soni");
list.add("MMM");
list.add("GKP");
for(string s : list){
if(s.equals(" Anurag")
s.remove();
System.out.println(s);
}
This will throw an exception-`Concurrent Modification exception` as you are trying to alter the structure of the data structure List before the iteration is completed.
so you may use Iterator for the same purpose .
Iterator iterator = List.iterator();
while(iterator.hasNext()){
String current = iterator.next();
if(current=="Anurag"){
iterator.remove();
}else{
System.out.println(current);
}
}
OUTPUT: Soni
MMM
GKP