HashSet<String> hs = new HashSet<>();
hs.add(\"java\"); hs.add(\"java\"); hs.add(\"c\"); hs.add(\"ios\");
Iterator<String> it = hs.iterator();
while (it.hasNext()) {
String s = it.next();
if (s.equals(\"java\")) it.remove();
System.out.println(s);
}
System.out.println(hs); System.out.println(hs.size());
迭代器是 輕量級遍歷工具物件,內部持有對集合內部結構的引用(如哈希表桶位索引、當前節點指標)。它 不複製元素,佔用極少記憶體(幾十位元組)。JVM 層面僅是一個普通物件實例,可透過 javap -c 查看位元碼確認。
it.remove() 後集合 size() 為何改變?Iterator.remove() 是 唯一安全在遍歷過程中修改集合的方法。它直接操作底層資料結構(如移除哈希桶節點、調整鏈表指標),導致集合元素實際減少,故 size() 即時反映最新數量。
程式碼邏輯:String s = it.next(); 先將元素引用存入區域變數 s,隨後 呼叫 it.remove() 從集合移除。System.out.println(s); 印的是區域變數 s 持有的引用(物件尚未被 GC),而非從集合重新讀取。遍歷結束後再印 hs,集合已無該元素,自然不顯示。
it.remove() 修改的是集合本體,即時生效。