黑马程序员技术交流社区

标题: 迭代器遍历添加元素? [打印本页]

作者: lijiy09    时间: 2016-3-17 12:56
标题: 迭代器遍历添加元素?
List<String> list = new ArrayList<String>();
        String s1 = "hello";
        String s2 = "world";
        String s3 = "java";
        list.add(s1);
        list.add(s2);
        list.add(s3);

        ListIterator<String> lit = list.listIterator();
        while (lit.hasNext()) {
                String s = (String) lit.next();
                if (s.equals("hello")) {
                        lit.add("javaee");
                }
                System.out.println(s);
                }
               
        System.out.println(list);
这里迭代器添加对象后,输出结果为
hello
world
java
[hello, javaee, world, java]
添加的"javaee"却没有被遍历输出?求解?
作者: cxy374100657    时间: 2016-3-17 13:54
没有输出吗?
作者: tangshenshen    时间: 2016-3-17 14:03
观摩观摩,哈`~~~~~~
作者: little_bear123    时间: 2016-3-17 14:49
迭代器有add方法吗
作者: 任楚贤    时间: 2016-3-17 16:14
在你的代码中,if语句中的意思是当遇到“hello”是,就加入“javaee”,所以结果就是这样的
作者: freshnboy    时间: 2016-3-17 16:25
本帖最后由 freshnboy 于 2016-3-17 16:31 编辑

也就是说listIterator在使用完add方法后自动跳过了添加的元素咯?我们把楼主的代码稍作修改: if (s.equals("hello")) {
                                    lit.add("javaee");
                                    lit.add("lhy");
                                    lit.add("lhy");
                                    lit.add("lhy");
                            }
实际上把楼主的add语句多添加几个,结果依然是不迭代新添加的元素。
if (s.equals("hello")) {
                                    lit.add("javaee");
                                    lit.add("lhy");
                                    lit.add("lhy");
                                    lit.add("lhy");
                                    lit.previous();
                            }
而使用了一次previous方法后,就往回迭代了一个index,所以listIterator应该是跳过新添加的元素的。记得视频讲过迭代器底层是用数组实现的,那可能index就在add之后自动++了吧。


作者: lijiy09    时间: 2016-3-17 21:00
加上lit.previous();果然可以输出迭代器添加的对象了,谢谢解答~




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