A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

昨天我在写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()方法,除非需求是那样的。

5 个回复

倒序浏览
常识性知识   
回复 使用道具 举报

是啊,特别是新手,可得注意了!
回复 使用道具 举报
其实这个很容易忽略的。
回复 使用道具 举报
qq8921310 发表于 2014-10-24 15:34
其实这个很容易忽略的。

是啊,一开始我没注意,就出了错,还是后来好好看,找出来的
回复 使用道具 举报
谢谢提醒 以后要注意
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马