黑马程序员技术交流社区

标题: 迭代的小疑惑 [打印本页]

作者: 胥文    时间: 2013-1-30 00:26
标题: 迭代的小疑惑
本帖最后由 张向辉 于 2013-1-31 22:09 编辑

ArrayList a= new ArrayList();
a.add("java01");
a.add("java02");
a.add("java03");
Iterator it =a.iterator();
while(it.hasNext())
{
       Object obj = it.next();
       if(obj.equals("java01"))
       {
                 it.remove();
        }
        System.out.println(obj);//obj的结果是java01,java02,java03


}
System.out.println(a);//a的结果是java02,java03


对于obj的输出结果不是很理解?
作者: 王溢君    时间: 2013-1-30 00:30
it.remove();remove方法只是去掉了那个java01的引用,但是那个对象还在此Object里面啊。
作者: 郭冰川    时间: 2013-1-30 00:46
看我代码上的注释,希望你明白。

ArrayList a= new ArrayList();
a.add("java01");
a.add("java02");
a.add("java03");
Iterator it =a.iterator();
while(it.hasNext())
{
       Object obj = it.next(); //虽然后面有个删除java01的操作,但是obj已经存储了三个对象,删除动作在这的后面,对这是没影响的。
       if(obj.equals("java01"))
       {
                 it.remove();
        }
        System.out.println(obj);//这里打印的是obj,上面注释那说明了,所以这的结果肯定还是java01,java02,java03


}
System.out.println(a);//这里打印的是a,a集合里面被删除了java01,所以结果就是java02,java03


作者: 方寅生    时间: 2013-1-30 11:19
本帖最后由 方寅生 于 2013-1-30 11:22 编辑

    Object obj = it.next(); //迭代器赋值给obj
    if(obj.equals("java01"))
    {
                 it.remove();//迭代器这里的remove,不会改变obj的值
     }




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