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

  • 相关阅读:
    模板方法模式
    LINQ多条件OR模糊查询
    在LINQ中实现多条件联合主键LEFT JOIN
    js只显示整点
    Vue-cli2中处理跨域
    vue动态绑定类(实现tab)
    Vue中引入cdn同时防止cdn挂掉
    vue+nginx开启gzip压缩
    Vue路由守卫
    vue-router嵌套路由和二级目录(域名)
  • 原文地址:https://www.cnblogs.com/ynzj123/p/12758389.html
Copyright © 2011-2022 走看看