日期:2014-05-20  浏览次数:20751 次

菜鸟求教~关于Iterator的一些不明白。。。
Set<String> s = new HashSet();
s.add("111");
s.add("222");
s.add("333");
//能运行正常
Iterator it = s.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}
//运行不正常
while(s.iterator().hasNext())
{
System.out.println(s.iterator().next());
}
请问两断代码有什么不同..

------解决方案--------------------
上面的代码只取一个迭代器对象,遍历完所有对象后,程序结束;
而下面的代码,每次运行s.iterator(),就获得一个迭代器对象。所以每循环一次,产生两个跌代器对象。下次循环时,将产生两个新的对象,原来的两个对象没有引用指向,会变成垃圾;所以代码会无限期循环,输出的总是第一个元素。
------解决方案--------------------
看了楼主的代码,我有两方面看法
第一 我觉得还是楼主的基础比较差
     平时应该多注意修炼下基本功
第二 我想解释下这个程序里设计的一些概念
     Set 容器,用来装对象的
     Iterator 迭代器,用来访问容器的一种手段(注意:只是其中的一种)
     所以 Iterator it = s.iterator(); 有一次就够了,
     而while(s.iterator().hasNext()) 循环取得访问容器手段,用该手段判断容器是否有值
     
     要记住取得访问容器的手段,一次就够了!取得手段后,在手段里做遍历!