昨天我在写ArrayList集合遍历的时候,遇到这么一个问题:
ArrayList a1 = new ArrayList();
a1.add("Java01");
a1.add("Java02");
a1.add("Java03");
a1.add("Java04");
Iterator it = a1.iterator();
while(it.hasNext()){
sop(it.next());
if(!"Java02".equals(it.hasNext())){
sop(it.hasNext());
}
}
我的目的就是输出除Java02外,所有的元素。
然而,输出结果很令我意外:
Java02
Java04
经过分析,我发现我犯了一个比较低级却不容易发现的问题:
it.next()方法,在判断语句中被调用了两次,以至于:
Java01通过了判断,而当代吗再一次碰到it.next()的时候,会继续往后遍历,也就会输出Java02。
Java03同Java01一样通过了判断,但在输出时又碰到了it.next(),所以就输出了Java04
也就是造成本次研究失败的是多用了一次it.next()方法。
那么,解决方法就是讲it.next()输出值赋给一个String变量。
ArrayList a1 = new ArrayList();
a1.add("Java01");
a1.add("Java02");
a1.add("Java03");
a1.add("Java04");
Iterator it = a1.iterator();
while(it.hasNext()){
//sop(it.next());
String il = it.next().toString();
if(!"Java02".equals(il)){
sop(il);
}
}
所以,在使用Iterator遍历的时候,一定要注意不要在循环、判断里面嵌套多个.next()方法,除非需求是那样的。 |
|