黑马程序员技术交流社区

标题: 有关集合,数组中Iterator遍历插入判断需要注意的一项问题 [打印本页]

作者: maralbertlee    时间: 2014-10-23 13:59
标题: 有关集合,数组中Iterator遍历插入判断需要注意的一项问题
昨天我在写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()方法,除非需求是那样的。
作者: yueyazhishang    时间: 2014-10-23 14:18
常识性知识   
作者: maralbertlee    时间: 2014-10-24 10:14
yueyazhishang 发表于 2014-10-23 14:18
常识性知识

是啊,特别是新手,可得注意了!
作者: qq8921310    时间: 2014-10-24 15:34
其实这个很容易忽略的。
作者: maralbertlee    时间: 2014-10-25 11:59
qq8921310 发表于 2014-10-24 15:34
其实这个很容易忽略的。

是啊,一开始我没注意,就出了错,还是后来好好看,找出来的
作者: 紫缘ぶ逸影    时间: 2014-10-25 12:17
谢谢提醒 以后要注意




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2