出现这个异常的原因之一是因为线程访问越界
比如以下这种情况
List<String> list = new ArrayList<>();
list.add("wo");
list.add("ni");
list.add("ta");
System.out.println(list);
Iterator<String> iterator = list.iterator();
while(iterator.hasNext()){
if(iterator.next().equals("wo")){
iterator.remove();
}
System.out.println(iterator.next());
很明显是因为Iterator类中的next()方法使用了多次,请看 ArrayList的源码if (i >= size) throw new NoSuchElementException();
,在使用迭代器的时候注意next()方法在同一循环中不能出现俩次
改正之后:
while (iterator.hasNext()) {
String str = iterator.next();
if (str.equals("wo")) {
iterator.remove();
//如果加上这个语句,则全部输出,如果不加只会输出后俩个
//System.out.println(str);
continue;
}
System.out.println(str);
}