开发者社区> 问答> 正文

Java 集合与迭代器间关系

HashSet<String> hs = new HashSet<String>();
    hs.add("java");
    hs.add("java");
    hs.add("c");
    hs.add("ios");

    System.out.println(hs.size());

    Iterator<String> it = hs.iterator();

    while(it.hasNext()) {
        String s = (String) it.next();
        if(s.equals("java")) {
                it.remove();
        }
        System.out.println(s);
    }
    System.out.println(hs);
    System.out.println(hs.size());
看上段代码:疑问:
    疑问1:迭代器 与 集合 在**内存**中关系
    疑问2:迭代过程删除某元素(it.remove())后,集合的大小 size() 改变了,为什么?
    疑问3: 既然 size() 改变 it.remove(),为何还打印 被删除的元素,迭代结束重新打印集合反而 不打印?

展开
收起
蛮大人123 2016-03-20 18:36:56 2418 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    1 迭代器是遍历集合的一种方式,内存中就是普通变量啊。javap -c查看下字节码就知道了。
    2 remove之后size大小是改变了的啊,元素减少了啊。
    3 it.remove()方法申明返回的是void,不会打印被删除的元素的,你的代码是先用一个变量s存储了it.next()元素后,才删除的。虽然元素在集合中删除了,但是却被记录在变量中了。
    所以你的System.out.println(s);本身是在删除之前就记录下来才打印的。

    2019-07-17 19:09:55
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载