Code Bye

关于Iterator集合NoSuchElementException

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class IteratorDome01 {

public static void main(String[] args) {
List<String> lists=new ArrayList<String>();
 lists.add(“A”);
 lists.add(“B”);
 lists.add(“C”);
 lists.add(“D”);
 lists.add(“E”);
 lists.add(“F”);
// lists.add(“G”);
 Iterator<String> iter= lists.iterator();
 while (iter.hasNext()) {
System.out.println(iter.next());
String str=iter.next();
if (“A”.equals(str)) {
iter.remove();
}else{
System.out.println(str);
}
}
}

}
写代码如上,,为什么当取消注释 // lists.add(“G”);输出结果就会报错,,输出结果为
A
B
C
D
E
F
G
Exception in thread “main” java.util.NoSuchElementException
at java.util.ArrayList$Itr.next(Unknown Source)
at edu.jju.list.IteratorDome01.main(IteratorDome01.java:22)


40分
你需要正确理解next()方法的作用,你在循环里面调用了2次next,所以每循环一次,会读取list中的2个元素。
你看看下面代码和你的代码的区别:

			List<String> lists = new ArrayList<String>();
			lists.add("A");
			lists.add("B");
			lists.add("C");
			lists.add("D");
			lists.add("E");
			lists.add("F");
			lists.add("G");
			Iterator<String> iter = lists.iterator();
			while (iter.hasNext()) {
				//取得 下一个元素
				String str = iter.next();
				System.out.println(str);
				if ("A".equals(str)) {
					iter.remove();
				} else {
					System.out.println("Not A::: "+str);
				}
			}
懂了,,非常感谢

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于Iterator集合NoSuchElementException