java为何抛出NoSuchElementException异常?

出现这个异常的原因之一是因为线程访问越界
比如以下这种情况

 List list = new ArrayList<>();
 list.add("wo");       
 list.add("ni");
 list.add("ta");
 System.out.println(list);
 Iterator 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);
        }    

你可能感兴趣的:(JavaSE)