zoukankan      html  css  js  c++  java
  • Java迭代器(Iterator)的next()使用陷阱

    进坑几次了,有必要记录下来

    在使用迭代器遍历集合时,如下代码:

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

    我的意图是用迭代器依次调用集合中的对象的get方法,上面的getXxx()分别是返回两个对象属性值;坑就在这里,报异常java.util.NoSuchElementException(没有元素异常),但明明对象还没有输出遍历完成;

    • 原因:每调用一次next(),就会获取下一位元素数据,改变指指针指向的是next(),并不是hasNext(),所以无论遍历次数怎么变化,你调用了next()他就会接着读取下一位;
    • 总结:使用迭代器(Iterator)时,尽量一个遍历结构只有一个hasNext()和next(),关键是理解next()是改变指针指向并且读取元素数据的角色;

    补充

    • Iterator值传递机制:使用迭代器遍历集合时,是将集合的值传递给迭代器变量,并非把传递集合元素本身(所以对迭代变量进行赋值操作并不会影响到集合)
    • 使用迭代遍历集合时,无法对集合元素进行修改,会报异常:java.util.ConcurrentModificationException
  • 相关阅读:
    nodeJs-querystring 模块
    nodeJs-process对象
    nodejs-Path模块
    nodejs-os模块
    nodejs-CommonJS规范
    nodejs-Events模块
    nodejs-Http模块
    nodejs-Cluster模块
    转:AOP与JAVA动态代理
    转:jdk动态代理实现
  • 原文地址:https://www.cnblogs.com/csyh/p/12316962.html
Copyright © 2011-2022 走看看