zoukankan      html  css  js  c++  java
  • 32 Iterator 怎么使用?有什么特点?

    Iterator 怎么使用?有什么特点?

    答:

    使用:

    Iterator 接口源码中的方法:

    • java.lang.Iterable 接口被 java.util.Collection 接口继承,java.util.Collection 接口的 iterator() 方法返回一个 Iterator 对象

    • next() 方法获得集合中的下一个元素

    • hasNext() 检查集合中是否还有元素

    • remove() 方法将迭代器新返回的元素删除
       
       

    Iterator 的使用示例

    //是否有下一个元素
    boolean hasNext();
     
    //下一个元素
    E next();
     
    //从迭代器指向的集合中删除迭代器返回的最后一个元素
    default void remove() {
        throw new UnsupportedOperationException("remove");
    }
     
    //遍历所有元素
    default void forEachRemaining(Consumer<? super E> action) {
        Objects.requireNonNull(action);
        while (hasNext())
            action.accept(next());
    }
    

     
     

    特点:

    在迭代过程中调用集合的 remove(Object o) 可能会报 java.util.ConcurrentModificationException 异常
    forEachRemaining 方法中 调用Iterator 的 remove 方法会报 java.lang.IllegalStateException 异常

    //使用迭代器遍历元素过程中,调用集合的 remove(Object obj) 方法可能会报 java.util.ConcurrentModificationException 异常
        public static void testListRevome() {
             ArrayList<String> aList = new ArrayList<String>();
             aList.add("111");
             aList.add("333");
             aList.add("222");
             System.out.println("移除前:"+aList);
             
             Iterator<String> iterator = aList.iterator();
             while(iterator.hasNext())
             {
                 if("222".equals(iterator.next()))
                 {
                    aList.remove("222");          
                 }
             }
             System.out.println("移除后:"+aList);
        }
        
        //JDK 1.8 Iterator forEachRemaining 方法中 调用Iterator 的 remove 方法会报 java.lang.IllegalStateException 异常
        public static void testForEachRemainingIteRemove () {
            final Iterator<String> iterator = list.iterator();
            iterator.forEachRemaining(new Consumer<String>() {
     
                public void accept(String t) {
                    if ("222".equals(t)) {
                        iterator.remove();
                    }
                }
            });
        }
    

     

    参考博文:https://www.cnblogs.com/ConstXiong/p/11903918.html

  • 相关阅读:
    复用$.ajax方式传递参数错误处理
    JS传递函数并且调用
    JQuery $.axaj的基本格式
    AOP的具体实践-简化结果返回的处理
    将Python打包成可执行文件exe的心路历程
    通过Python实现一个文档的半自动录入工具
    我的第一次实习感悟
    docker nginx+php-fpm+mysql
    使用Harbor搭建docker私服
    python 验证码获取后处理降噪、灰度、保存
  • 原文地址:https://www.cnblogs.com/ynzj123/p/12758389.html
Copyright © 2011-2022 走看看