我使用迭代器和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
答案 0 :(得分:1)
每个next()
都会从迭代器中获取一个条目。你将玛丽和尼克与尼克比较,然后打印出约翰和乔治。
仅在循环中调用next()
一次,并将其保存在一个变量中,然后用于打印和比较。
答案 1 :(得分:1)
您正在调用next()
,因此迭代器会执行两个步骤。如果要对String
返回的iterator.next()
执行更多操作,则需要将此值存储在变量中,并使用此变量执行这些操作。
更改这些行:
while (iterator.hasNext()) {
System.out.println(iterator.next()); // first valie returned by iterator
if (iterator.next().equals("Nick") { // second value returned by the iterator
iterator.remove(); // second value returned by the iterator removed
}
}
为:
while (iterator.hasNext()) {
String s = iterator.next(); // here you store value returned by the iterator to make proper checks further
System.out.println(s); // here you use created variable instead of calling next()
if (s.equals("Nick") {, // again, created variable instead of next()
iterator.remove(); // here you remove last value returned by the iterator
}
}
答案 2 :(得分:0)
next()方法被调用两次