同一个Iterator迭代器只能遍历一次

今天在学习的时候,碰到用迭代器去遍历集合的时候一直没有元素输出,琢磨了好久我才知道 “同一个迭代器只能遍历一次,如果写了两个遍历,则第二个遍历无法输出”

我的问题原因"我想删掉集合中的一个元素然后再遍历输出,结果输出结果还是没有删除之前的"

public void test5(){
    
    
        /*
        迭代器当中的 remove方法
         */
        Collection collection=new ArrayList();
        collection.add(1234);
        collection.add(new String("123"));
        collection.add(new Person(18,"Jerry"));
        Iterator iterator = collection.iterator();

        while (iterator.hasNext()){
    
    
            Object next = iterator.next();//next() 方法返回的是下一个对象
            if (next.equals("123")){
    
    
                iterator.remove();
            }
            System.out.println(next+"***");
        }

        while (iterator.hasNext()){
    
    
            System.out.println(iterator.next()+"$$$$");
        }

    }
运行结果	:这就说明下一个迭代器根本没执行
1234***
123***
Person{age=18, name='Jerry'}***

经过我翻阅资料,才弄明白同一个迭代器只能遍历一次,于是再造一个迭代器,即可解决问题

  public void test5(){
    
    
        /*
        迭代器当中的 remove方法
         */
        Collection collection=new ArrayList();
        collection.add(1234);
        collection.add(new String("123"));
        collection.add(new Person(18,"Jerry"));
        Iterator iterator = collection.iterator();

        while (iterator.hasNext()){
    
    
            Object next = iterator.next();//next() 方法返回的是下一个对象
            if (next.equals("123")){
    
    
             iterator.remove();
           }
            System.out.println(next+"***");
        }
        Iterator iterator1 = collection.iterator();
        while (iterator1.hasNext()){
    
    
            System.out.println(iterator1.next()+"$$$$");
        }
    }
修改后的运行结果:正常遍历输出了 
1234***
123***
Person{age=18, name='Jerry'}***
1234$$$$
Person{age=18, name='Jerry'}$$$$

总结:解决问题的过程是痛苦的,但是成功解决让人真的很开心!!!

猜你喜欢

转载自blog.csdn.net/weixin_46351306/article/details/113705527