- Java code
public static void main(String[] args){ HashSet hs = new HashSet(); hs.add("1st"); hs.add("2nd"); hs.add(new Integer(3)); hs.add(new Double(4.8)); hs.add("2nd"); //导入重复元素 hs.add(new Integer(3)); //导入重复元素,不会成功,HashSet中不允许有重复元素 hs.add(new Date()); System.out.println("开始:size="+hs.size()); Iterator it = hs.iterator(); while(it.hasNext()){ Object o = it.next(); System.out.println(o); } System.out.println("---------------------------"); hs.remove("2nd"); System.out.println("移除元素后:size="+hs.size()); //下列循环未执行 while(it.hasNext()){ Object o = it.next(); System.out.println(o); } System.out.println("---------------------------"); System.out.println(hs); }
为什么在删除之后的第二个遍历(Iterator)不能循环打印了,只是执行了第一次的遍历。学基础在,有点不清楚啊,请指教!!
------解决方案--------------------------------------------------------
并不是内容变了,而是楼主对iterator的理解不够,你可以把iterator理解为有状态的,它的内部会维护一个逻辑上的指针,这个指针指向当前可访问的对象,通过iterator.next()获取的就是这个指针指向的对象,每次next方法执行的时候,指针都会往下移位,这是原理。
你在上一次遍历后,iterator的指针移位到元素的最末尾,这样iterator的hasNext()方法返回false,所以就不会输出,解决方法就是 重新再赋值,it=hs.iterator()方法,这样赋值后迭代器的逻辑指针会调整指向第一个元素
------解决方案--------------------------------------------------------
Iterator it = hs.iterator();
这个迭代器对象,只能完成一次数据的迭代。
要想第二次迭代,可以再次调用it = hs.iterator();生成新的迭代器对象。
------解决方案--------------------------------------------------------
第一个执行到了结尾了吧。。。。我也不知道,猜的