[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]