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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lijiy09 中级黑马   /  2016-3-17 12:56  /  1685 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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"却没有被遍历输出?求解?

6 个回复

倒序浏览
没有输出吗?
回复 使用道具 举报
观摩观摩,哈`~~~~~~
回复 使用道具 举报
迭代器有add方法吗
回复 使用道具 举报
在你的代码中,if语句中的意思是当遇到“hello”是,就加入“javaee”,所以结果就是这样的
回复 使用道具 举报
本帖最后由 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之后自动++了吧。

回复 使用道具 举报
加上lit.previous();果然可以输出迭代器添加的对象了,谢谢解答~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马