zoukankan      html  css  js  c++  java
  • 48. 迭代器注意事项

    迭代器中的几个方法:

    hasNext()   判断是否存在下一个元素

    next()     输出指针当前指向的元素,后指针向下移动一位

    add()     在当前指针指向的位置上添加指定元素

    下面我们来看一下代码

    public static void main(String[] args) {
            List list = new ArrayList();
            list.add("张三");
            list.add("李四");
            list.add("王五");
            
            ListIterator listit = list.listIterator();
            while(listit.hasNext()) {
                System.out.println(listit.next());
                listit.add("aa");
            }
            System.out.println(list);
            
        }

    首先第一点,我们可以知道add方法添加成功了。可以按照我们的想法应该是死循环啊?

    开始指针指向的是0,当运行next方法的时候指针指向了1,再运行add添加了“aa”,我们可以知道添加成功了,但是为什么没有输出aa呢?还有为什么没有死循环?

    我们来看看源代码:

    add的源代码

    public void add(E e) {
                checkForComodification();
    
                try {
                    int i = cursor;
                    ArrayList.this.add(i, e);
                    cursor = i + 1;
                    lastRet = -1;
                    expectedModCount = modCount;
                } catch (IndexOutOfBoundsException ex) {
                    throw new ConcurrentModificationException();
                }
            }

    我们可以发现每当add的时候cursor都加1,这说说明跳过了我们添加的元素。没有输出的原因是,防止上面死循环出现

    下面我们再看一段代码:

    public static void main(String[] args) {
            List list = new ArrayList();
            list.add("张三");
            list.add("李四");
            list.add("王五");
            
            ListIterator listit = list.listIterator();
            while(listit.hasNext()) {
                System.out.println(listit.next());
                list.add("aa");
            }
            System.out.println(list);
        }

    注意:这样写会报错的,如果这样写,那么添加的元素会添加在集合的末尾处,会直接跳过集合中的所有元素,这个是不允许的

  • 相关阅读:
    java web项目打包.war格式
    version 1.4.2-04 of the jvm is not suitable for thi
    Sugarcrm Email Integration
    sharepoint 2010 masterpage中必须的Content PlaceHolder
    微信开放平台
    Plan for caching and performance in SharePoint Server 2013
    使用自定义任务审批字段创建 SharePoint 顺序工作流
    Technical diagrams for SharePoint 2013
    To get TaskID's Integer ID value from the GUID in SharePoint workflow
    how to get sharepoint lookup value
  • 原文地址:https://www.cnblogs.com/zjdbk/p/8985566.html
Copyright © 2011-2022 走看看