黑马程序员技术交流社区

标题: CollectionJ集合用for方法去除元素的问题 [打印本页]

作者: 王世虎    时间: 2014-11-26 17:27
标题: CollectionJ集合用for方法去除元素的问题
刚才和一哥们交流,有点问题   先上代码:
import java.util.*;
class  CollectionDemo8
{
        public static void main(String[] args)
        {
                ArrayList al = new ArrayList();
                al.add("java01");
                al.add("java02");
                al.add("java03");
                al.add("java04");
/*
                ListIterator li = al.listIterator();
                while (li.hasNext())
                {
                        if (li.next().equals("java02"))
                        {
                                li.set("java08");
                        }
                        sop( li.next());
                        sop("haha");
                }
                while (li.hasPrevious())
                {
                        sop("haha");
                        sop("pre"+li.previous());
                }
        */       
                for (ListIterator li = al.listIterator(); li.hasPrevious(); )
                        {
                                sop("haha");
                                sop("pre"+li.previous());
                        }
                for (ListIterator li = al.listIterator(); li.hasNext(); )
                {
                        Object obj = li.next();
                        if (obj.equals("java02"))
                        {
                                li.set("java08");
                        }
                        sop( obj);
                        sop("haha");
                }               
        }       
        public static void sop(Object obj)
        {
                System.out.println(obj);
        }
}

用while可以把集合里面的元素正向和逆向都可以取出
但用for时,正向取出可以,但为什么逆向取出不行?


感觉是for循环中的li.hasPrevious()的值是不是为假,求大神帮助




作者: 完美是芬    时间: 2014-11-26 17:57
本帖最后由 完美是芬 于 2014-11-26 17:59 编辑

因为你把
for (ListIterator li = al.listIterator(); li.hasPrevious(); )
                        {
                                sop("haha");
                                sop("pre"+li.previous());
                        }
这一段代码放到了前面,而一开始前面是没有集合对象的,
如果把这一段放到另一个for循环下面就可以了
while也一样
这等于操作的指针,一开始指针在开头,往后面走,到最后再往前面走

作者: 王世虎    时间: 2014-11-26 22:56
完美是芬 发表于 2014-11-26 17:57
因为你把
for (ListIterator li = al.listIterator(); li.hasPrevious(); )
                        {

不对吧 这个不是这样理解的 吧  这两个for循环里面的ListIterator li = al.listIterator()只在本次循环有效。
而且放在前后没什么区别的
作者: 完美是芬    时间: 2014-11-26 23:29
王世虎 发表于 2014-11-26 22:56
不对吧 这个不是这样理解的 吧  这两个for循环里面的ListIterator li = al.listIterator()只在本次循环有 ...

你可以把while中的两个顺序换一下你就知道了。
作者: 王世虎    时间: 2014-11-27 01:15
完美是芬 发表于 2014-11-26 23:29
你可以把while中的两个顺序换一下你就知道了。

哥们 while是这种情况  但是在for 这里面不适用
作者: 完美是芬    时间: 2014-11-27 17:23
王世虎 发表于 2014-11-27 01:15
哥们 while是这种情况  但是在for 这里面不适用

因为你把ListIterator li = al.listIterator();定义在while外面,而却把它放在for里面,你把for的这个代码也放外面看看,是不是一样的。。。ListIterator li = al.listIterator(); li就是从al集合的第一个对象前面开始的迭代的,如果一上来就查看它前面的对象,那是不存在的!
作者: 康师傅-蛋黄派    时间: 2014-11-27 23:44
静下心来,好好想想就知道了,我开始也碰到了这个问题,一楼说的对。




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