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);本身是在刪除之前就記錄下來才打印的。