为什么这个java代码有效?

cur*_*eer -1 java iteration collections iterator

在迭代期间,不允许从集合中删除.我有一段代码正在工作,我认为不应该工作.它可能在将来失败,为什么它现在正在运作?

public class RemoveFromSet {

    static Set<Integer> set = new HashSet<>();
    public static void main(String[] args) {
        set.add(1);
        set.add(2);
        set.add(3);
        set.add(4);
        while(set.size()>0) {
            int val = set.iterator().next();
            set.remove(val);
            System.out.println("removed val = "+val);
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

Eel*_*lke 5

实际上这应该可行,因为循环中的第一行在每次迭代时检索一个全新的迭代器.现在,如果在删除后使用迭代器,则会出现问题.