先上代码:【错误的】
public static void main(String[] args)
{
String node_id="stkkh";
List<String> rejectList =new ArrayList<String>();
rejectList.add("stkkh");
if ( rejectList != null)
{
for (Iterator<String> it = rejectList.iterator(); it.hasNext();)
{
/*
* Exception in thread "main" java.util.NoSuchElementException
at java.util.AbstractList$Itr.next(AbstractList.java:350)
at com.thinkive.fxc.stkkh.bus.function.test.test.main(test.java:21)
*/
System.out.println(it.next());//这样会导致上面的报错
String tempRecord = it.next();
if(node_id.equals(tempRecord))
{
it.remove();
System.out.println("tempRecord");
}
}
}
}
这样运行你会发现报错:
之前我是在代码里面写log的时候和上面System方式一样,直接调用it.next()) ,这样就出现问题,
原因是什么了?
百度有的说遍历元素在使用next()之前没有使用hasNext(),的确这样会抛出这个异常,但是上面的代码已经做出这个判断了,
那么问题到底是什么了?
看上面是26行有问题,就是再第二此调用it.next()的时候出现问题;
我们可以调试看看
看了离原因不远了
之后又再List里面添加几个元素,看看;
总结这些:
发现,再遍历的时候,每一次只能调用一次next();
每次调用next指针就会往后移动一位,但是调用多次,后面没有元素就会报错,