当前位置: 代码迷 >> J2SE >> java中HashSet与Iterator解决思路
  详细解决方案

java中HashSet与Iterator解决思路

热度:7518   发布时间:2013-02-25 00:00:00.0
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();生成新的迭代器对象。
------解决方案--------------------------------------------------------
第一个执行到了结尾了吧。。。。我也不知道,猜的
  相关解决方案