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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马-小龙 中级黑马   /  2013-3-4 23:04  /  1045 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public static void main(String[] args) {
    ArrayList<String> s=new ArrayList<String>();
            s.add("haha");
            s.add("hehe");
            s.add("heihei");
        ListIterator<String> it = s.listIterator();
        while (it.hasNext()) {
                String m = it.next();
                if ("hehe".equals(m)) {
                        it.add("nihao");
                }
                System.out.println(m);//为什么前面添加的"nihao",在当前遍历中没有打印出来?   
        }

        //重新打印集合,数据就已经存在了。
        System.out.println(s);
    }

评分

参与人数 1技术分 +1 收起 理由
洪建超 + 1

查看全部评分

3 个回复

倒序浏览
因为,Iterator,已经获取到了集合中所有的元素,就是在  ListIterator<String> it = s.listIterator();
已经不是了一份,放到了迭代器里面。及时你从迭代器里向 ArrayList集合里添加。操作的也不是,同一条数据。

因为,它们不是同一对象。
回复 使用道具 举报
public static void main(String[] args) {
    ArrayList<String> s=new ArrayList<String>();
            s.add("haha");
            s.add("hehe");
            s.add("heihei");
        ListIterator<String> it = s.listIterator();//因为定义迭代器的时候,迭代器就已经获取了集合的长度,迭代器按指定顺序取元素,你再往里面添加,迭代器可能已经取到后面去了,他不可能跑回来再取元素,这是不合理的.
        while (it.hasNext()) {
                String m = it.next();
                if ("hehe".equals(m)) {
                        it.add("nihao");
                }
                System.out.println(m);//为什么前面添加的"nihao",在当前遍历中没有打印出来?   
        }

        //重新打印集合,数据就已经存在了。
        System.out.println(s);
    }

评分

参与人数 1技术分 +1 收起 理由
洪建超 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 张宁 于 2013-3-4 23:27 编辑

ListIterator<String> it = s.listIterator();//补充一下楼上的:因为定义迭代器的时候,迭代器就已经获取了集合的长度,迭代器按指定顺序取元素,你再往里面添加,迭代器可能已经取到后面去了,他不可能跑回来再取元素,这是不合理的.++在一个 在对迭代器遍历的时候是对一个对象进行遍历,下面取出的是迭代元素m,是对整个集合的遍历,当然没有“nihao“了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马