add方法示例

//在最前面添加
List<String> list1 = new LinkedList<String>(Arrays.asList(new String[] { "a", "b", "c" }));
ListIterator<String> listIterator1 = list1.listIterator();
listIterator1.add("D");
listIterator1.add("E");
System.out.println(list1);//[D, E, a, b, c]

//在最后面添加
List<String> list2 = new LinkedList<String>(Arrays.asList(new String[] { "a", "b", "c" }));
ListIterator<String> listIterator2 = list2.listIterator();
while (listIterator2.hasNext()) {
    listIterator2.next();
}
listIterator2.add("D");
listIterator2.add("E");
System.out.println(list2);//[a, b, c, D, E]

//在每个元素的前面和后面都添加
List<String> list3 = new LinkedList<String>(Arrays.asList(new String[] { "a", "b", "c" }));
ListIterator<String> listIterator3 = list3.listIterator();
while (listIterator3.hasNext()) {
    listIterator3.add("前面");
    listIterator3.next();
    listIterator3.add("后面");
}
System.out.println(list3);//[前面, a, 后面, 前面, b, 后面, 前面, c, 后面]

//在指定元素的前面和后面添加
List<String> list4 = new LinkedList<String>(Arrays.asList(new String[] { "a", "b", "c" }));
ListIterator<String> listIterator4 = list4.listIterator();
while (listIterator4.hasNext()) {
    if (listIterator4.next().equals("a")) {//现在指向的是a的后面
        listIterator4.previous();//先重新指向a的前面,这里不用担心NoSuchElementException
        listIterator4.add("前面");//在前面添加元素,添加后还是指向的a的前面
        listIterator4.next();//向后【再】移动一位,现在指向的是a的后面
        listIterator4.add("后面");//在a的后面添加元素
    }
}
System.out.println(list4);//[前面, a, 后面, b, c]  

remove方法

remove必须要跟在next()或是previous()之后,而且只能执行一次,删多个元素,需要再执行next()或previous()。
在执行next()或previous()后不能先执行了 add()方法。因为add()方法执行以后,迭代器已经移动了,这样所要删除的目标元素指向不明,会报异常。
     //可以直接add,但不能直接remove,remove必须放在next之后
        try {
            List<String> list1 = new LinkedList<String>(Arrays.asList(new String[] { "a", "b", "c" }));
            ListIterator<String> listIterator1 = list1.listIterator();
            listIterator1.remove();
        } catch (Exception e) {
            System.out.println("直接remove会报 IllegalStateException");
        }

        //标准的做法:在next之后才能remove
        List<String> list2 = new LinkedList<String>(Arrays.asList(new String[] { "b", "a", "b", "c", "b", }));
        ListIterator<String> listIterator2 = list2.listIterator();
        while (listIterator2.hasNext()) {
            if (listIterator2.next().equals("b")) listIterator2.remove();
        }
        System.out.println(list2);//[a, c]

        //remove之前不能有add()
        try {
            List<String> list4 = new LinkedList<String>(Arrays.asList(new String[] { "a", "b", "c" }));
            ListIterator<String> listIterator4 = list4.listIterator();
            while (listIterator4.hasNext()) {
                if (listIterator4.next().equals("b")) {
                    listIterator4.add("添加");
                    listIterator4.remove();
                }
            }
        } catch (Exception e) {
            System.out.println("remove之前有add也会报 IllegalStateException");
        }

        //移除指定范围内的所有元素
        List<String> list3 = new LinkedList<String>(Arrays.asList(new String[] { "a", "开始", "b", "c", "d", "结束", "e" }));
        ListIterator<String> listIterator3 = list3.listIterator();
        while (listIterator3.hasNext()) {
            if (listIterator3.next().equals("开始")) {
                listIterator3.remove();//注释掉这行代码则不移除"开始"
                while (listIterator3.hasNext()) {
                    if (!listIterator3.next().equals("结束")) {
                        listIterator3.remove();//remove之后必须再调用next方法后才能再remove
                    } else {
                        listIterator3.remove();//注释掉这行代码则不移除"结束"
                        break;//结束while循环
                    }
                }
            }
        }
        System.out.println(list3);//[a, e]

        //替换指定元素
        List<String> list5 = new LinkedList<String>(Arrays.asList(new String[] { "a", "b", "c" }));
        ListIterator<String> listIterator5 = list5.listIterator();
        while (listIterator5.hasNext()) {
            if (listIterator5.next().equals("b")) {
                listIterator5.remove();
                listIterator5.add("替换");
            }
        }
        System.out.println(list5);//[a, 替换, c]  

ListIterator add remove 使用注意的更多相关文章

  1. WIX: Hide installed program from the Add/Remove Programs window.

    Reference article : How to hide an entry in the Add/Remove Programs applet? In Wix source files, set ...

  2. How to hide an entry in the Add/Remove Programs applet?

    Original link: http://www.winhelponline.com/articles/15/1/How-to-hide-an-entry-in-the-AddRemove-Prog ...

  3. Maste Note for OCR / Vote disk Maintenance Operations (ADD/REMOVE/REPLACE/MOVE)

    Doc ID 428681.1 Applies to: Oracle Database - Enterprise Edition - Version 10.2.0.1 to 11.2.0.1.0 [R ...

  4. 有关集合的foreach循环里的add/remove

    转自:Hollis(微信号:hollischuang) 在阿里巴巴Java开发手册中,有这样一条规定: 但是手册中并没有给出具体原因,本文就来深入分析一下该规定背后的思考. 1 .foreach循环 ...

  5. HashSet——add remove contains方法底层代码分析(hashCode equals 方法的重写)

    引言:我们都知道HashSet这个类有add   remove   contains方法,但是我们要深刻理解到底是怎么判断它是否重复加入了,什么时候才移除,什么时候才算是包括????????? add ...

  6. SharePoint自动化系列——Add/Remove "Record" from items

    转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ 目的:批量的将SharePoint items变成records或者将records变成普通的it ...

  7. SharePoint自动化系列——Add/Remove “Hold” from items

    转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ 问题1: 1.如果SharePoint item被添加了hold,通过UI界面来对SharePoi ...

  8. 阿里规范学习总结-不要再foreach对元素进行add()/remove()操作,

    在foreach循环中,对元素进行 remove()/add() 操作需要使用Iterator ,如果运行在多线程环境下,需要对Iterator对象枷锁. public class ForeachTe ...

  9. LinkedList add remove get 代码分析

    add void linkLast(E e) { //e 要添加的元素 final Node<E> l = last; // 最后一个元素 final Node<E> newN ...

随机推荐

  1. 『重构--改善既有代码的设计』读书笔记----Split Temporary Variable

    继续开始我们重构手法的系列,今天介绍的是Split Temporary Variable---分解临时变量. 在我们平常写的程序中肯定有某些临时变量被赋予了超过一个的责任.如果他们不是那种收集结果(t ...

  2. Java学习-----单例模式

    一.问题引入 偶然想想到的如果把Java的构造方法弄成private,那里面的成员属性是不是只有通过static来访问呢:如果构造方法是private的话,那么有什么好处呢:如果构造方法是privat ...

  3. 零散的笔记:jquery中的事件

    1.替代mouseover和mouseout的事件 jquery的mouseover和mouseout事件在移到子页面时也会触发,这在移到一级菜单弹出二级菜单,移到二级菜单时一级菜单也要显示时,这两个 ...

  4. 用批处理来重启IIS的应用程序池

    批处理很简单,先Stop再Start就行,代码如下(apppoolName是应用程序池的实例名):c:\windows\system32\inetsrv\AppCmd.exe stop apppool ...

  5. hibernate的get、load的方法的区别,IllegalArgument异常

    关于hibernate中的load,get,以及延迟加载问题 今天在使用hibernate时,发现一异常: could not initialize proxy - no Session 查询资料之后 ...

  6. MLlib 编程指导-spark-1.2.0

    本文来自 http://spark.apache.org/docs/latest/mllib-guide.html 官方文档翻译 个人翻译 MLlib包括的算法和工具主要有:分类,回归,聚类,协同过滤 ...

  7. SCALA中的函数式编程

    演示了值函数,匿名函数,闭包... 其它具体的应用,还得在生产当中吧.. 这个告一段落..其它SAM,CURRY,高阶函数,集合,泛型,隐式类..这些,还是找专门的书去深入了解啦... C:\User ...

  8. IC芯片設計

    IC從生產目的上可以分成為通用IC(如CPU,DRAM,接口芯片等)和ASIC(ApplicationSpecificIntegreted Circuit)兩種,ASIC是因應專門用途而生產的IC.  ...

  9. LTE发射机ACLR性能的测量技术

    现代无线服务提供商正致力于不断扩大带宽,为更多用户提供互联网协议(IP)服务.长期演进技术(LTE)是对当前部署的3GPP 网络进行增强并创造更多更重要应用的新一代蜂窝技术.LTE 的体系结构复杂同时 ...

  10. (转载)PHP删除数组中的特定元素的代码

    (转载)http://www.jb51.net/article/30689.htm 我们知道,PHP没有提供专门删除一个特定数组元素的方法.但是可以通过unset()函数来完成这种要求比如下面的程序: ...