【发布时间】:2018-01-16 14:37:20
【问题描述】:
我使用了一个迭代器和一个 while 循环来打印出 ArrayList 的所有条目。
我还使用了for 循环来打印出同一个ArrayList 的所有条目。
我试图用迭代器删除一个项目。似乎它已从 ArrayList 中正确删除,但 While 循环还删除了另外一项“Mary”。
这是资源代码。
public static void main(String[] args) {
ArrayList<String> names = new ArrayList<String>();
names.add("John");
names.add("Mary");
names.add("George");
names.add("Nick");
Iterator<String> iterator = names.iterator();
System.out.println("Iterator method: ");
while (iterator.hasNext()){
System.out.println(iterator.next());
if (iterator.next().equals("Nick")){
iterator.remove();
}
}
System.out.println("\nFOR loop method: ");
for (int i=0; i < names.size(); i++){
System.out.println(names.get(i));
}
}
为什么“玛丽”被删除了?
Iterator method:
John
George
FOR loop method:
John
Mary
George
Process finished with exit code 0
【问题讨论】:
-
您调用
iterator.next()两次,所以它当然会增加两次(并跳过Mary)。它正在做你告诉它做的事情,所以你不明白什么? -
每当你所有的 iterator.next 你改变位置。这就是为什么您需要在变量内部的循环中调用一次。
-
SO 不是一个很棒的教程网站。 tutorialspoint.com/java/java_using_iterator.htm