• 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

  • 相关阅读:
    后端开发-Mybatis开发之一
    Zeppelin推荐
    构建Maven项目
    linux使用curl进行WebService接口测试
    html和jsp的区别及优缺点
    Ajax实现Web长连接
    java生成二维码
    Android调用传感器和震动
    【Head First设计模式-读书笔记】装饰者模式
    【Head First设计模式-读书笔记】观察者模式
  • 原文地址:https://www.cnblogs.com/ynzj123/p/12758389.html
Copyright © 2020-2023  润新知