import java.util.*;
public class TestIterator {
public static void main(String []args) {
Name name1 = new Name("n1","f1");
Name name2 = new Name("n2","f2");
Name name3 = new Name("n3","f3");
Collection c = new HashSet();
Iterator i = c.iterator();
c.add(name1);
c.add(name2);
c.add(name3);
while (i.hasNext()) {
Name name = (Name)i.next();
String firstName = name.firstName;
System.out.println(firstName + "");
}
}
}
class Name {
public String firstName;
public String lastName;
Name(String firstName,String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
}
编译通过了,运行时没有任何的输出,我明明是用了System.out.println(),这是为什么
把 c.add()这3句放到,Iterator i = c.iterator()前面,就有输出了
迭代器要放到遍历开始前,不然已经失效了。
Collection c = new HashSet();
c.add(name1);
c.add(name2);
c.add(name3);
Iterator i = c.iterator();
while (i.hasNext()) {
Name name = (Name)i.next();
String firstName = name.firstName;
System.out.println(firstName + "");
}
你这样写实对一个空的集合在遍历,所以没有数据,你要把你的迭代器放到你添加数据之后啊
你对一个空集合遍历,怎么会有数据
你得先向集合里添加元素再获得迭代器。
Iterator i = c.iterator();
c.add(name1);
c.add(name2);
c.add(name3);
你把上面的代码变成:
c.add(name1);
c.add(name2);
c.add(name3);
Iterator i = c.iterator();
就行了
c.add(name1);
c.add(name2);
c.add(name3);
放到Iterator i = c.iterator();语句之前就可有输出。
原因是:
在迭代器迭代元素 的过程中,不允许使用集合对象改变集合中的元素个数,如果需要添加或者删除只能使用迭代器的方法进行操作。