程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> java-Java 集合與迭代器間關系

java-Java 集合與迭代器間關系

編輯:編程綜合問答
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(),為何還打印 被刪除的元素,迭代結束重新打印集合反而 不打印?

最佳回答:


1 迭代器是遍歷集合的一種方式,內存中就是普通變量啊。javap -c查看下字節碼就知道了。
2 remove之後size大小是改變了的啊,元素減少了啊。
3 it.remove()方法申明返回的是void,不會打印被刪除的元素的,你的代碼是先用一個變量s存儲了it.next()元素後,才刪除的。雖然元素在集合中刪除了,但是卻被記錄在變量中了。
所以你的System.out.println(s);本身是在刪除之前就記錄下來才打印的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved