写了个java小程序,编译通过了,运行时却没有任何输出,是为什么,求教!

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();语句之前就可有输出。
原因是:
在迭代器迭代元素 的过程中,不允许使用集合对象改变集合中的元素个数,如果需要添加或者删除只能使用迭代器的方法进行操作。