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

java中HashSet与Iterator
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();生成新的迭代器对象。
------解决方案--------------------
第一个执行到了结尾了吧。。。。我也不知道,猜的