了解Java Iterator

时间:2016-01-13 19:56:58

标签: java loops iteration

如果我运行以下代码,它将打印3次重复,但是当我在while循环中删除if语句时(只是为了查看它将迭代多少次),它会启动一个无限循环。

这个{{1}}方法实际上是如何工作的?我认为这将只迭代5次,因为我在列表中有5个项目。

{{1}}

3 个答案:

答案 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