Iterator接口的一点小问题(TP)

[code="java"]public class TestIterator {
public static void main(String[] args) {
Collection c = new HashSet();
c.add(new Cat("mimi"));
c.add(new Cat("miaomiao"));
c.add(new Cat("wowo"));

    Iterator i = c.iterator();
    while(i.hasNext()) {
      Cat cat = (Cat)i.next();
      if(cat.getName().length() > 4) {
        i.remove();                 
      } 
      System.out.print(cat.getName() + " ");
    }
            System.out.println(c.size());
     }

}[/code]

请问下该接口的remove方法原理, 我明明删除了第二个对象, 为何全部遍历出来了, 而且结果又显示2呢 ?
真心求教.

打个比方说,c 是个袋子,里面装着 3 只猫,你用 iterator 的 remove 方法把其中的一只叫 miaomiao 的取了出来,结果 c 里面还剩两只猫。

remove 方法删除的是袋子和 miaomiao 之间的关系,而不是 miaomiao 本身。

[code="java"]import java.util.*;

public class TestIterator {
static class Cat {
private String name;
public String getName() {return name;}
public Cat(String name) {
this.name = name;
}
}

public static void main(String[] args) {
    Collection<Cat> c = new HashSet<Cat>();
    c.add(new Cat("mimi"));
    c.add(new Cat("miaomiao"));
    c.add(new Cat("wowo"));

    Iterator i = c.iterator();
    while(i.hasNext()) {
        Cat cat = (Cat)i.next();
        if(cat.getName().length() > 4) {
            i.remove(); // Cat("miaomiao") 已经从 c 里面删掉了,
                        // 但是局部变量 cat 还保存着对它的引用
        } else { // 如果想不输出删掉的量,加个 else 就可以了
            System.out.print(cat.getName() + " ");
        }
    }

    System.out.println("\n\nc 的成员只剩下: ");
    for (Cat cat : c) {
        System.out.print(cat.getName() + " ");
    }
}

}

[/code]