ListIterator add remove 使用注意
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的前面,这里不用担心NoSuchElementExceptionlistIterator4.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之后才能removeList<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 使用注意的更多相关文章
- 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 ...
- 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 ...
- 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 ...
- 有关集合的foreach循环里的add/remove
转自:Hollis(微信号:hollischuang) 在阿里巴巴Java开发手册中,有这样一条规定: 但是手册中并没有给出具体原因,本文就来深入分析一下该规定背后的思考. 1 .foreach循环 ...
- HashSet——add remove contains方法底层代码分析(hashCode equals 方法的重写)
引言:我们都知道HashSet这个类有add remove contains方法,但是我们要深刻理解到底是怎么判断它是否重复加入了,什么时候才移除,什么时候才算是包括????????? add ...
- SharePoint自动化系列——Add/Remove "Record" from items
转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ 目的:批量的将SharePoint items变成records或者将records变成普通的it ...
- SharePoint自动化系列——Add/Remove “Hold” from items
转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ 问题1: 1.如果SharePoint item被添加了hold,通过UI界面来对SharePoi ...
- 阿里规范学习总结-不要再foreach对元素进行add()/remove()操作,
在foreach循环中,对元素进行 remove()/add() 操作需要使用Iterator ,如果运行在多线程环境下,需要对Iterator对象枷锁. public class ForeachTe ...
- LinkedList add remove get 代码分析
add void linkLast(E e) { //e 要添加的元素 final Node<E> l = last; // 最后一个元素 final Node<E> newN ...
随机推荐
- java web 学习(1)
java web 应用的核心技术包括以下几个方面: jsp:进行输入和输出的基本手段 javabean:完成功能的处理 servlet:对应用的流程进行控制 jdbc:是与数据库进行交互不可缺少的技术 ...
- 很久之前写的Ajax库
很久之前写的一个小型AJAX的js,放在上面以免以后想玩了找不到了. // version : 0.1 beta // author : __Ajax function __Ajax(url,opti ...
- 144 Binary Tree Preorder Traversal(二叉树先序遍历Medium)
题目意思:二叉树先序遍历,结果存在vector<int>中 解题思路:1.递归(题目中说用递归做没什么意义,我也就贴贴代码吧) 2.迭代 迭代实现: class Solution { pu ...
- 《asp.net mvc3 高级编程》第二章 控制器
一.控制器的角色 MVC模式中的控制器(Controller)主要负责响应用户的输入,并且在响应时通常会修改模型(Model).通过这种方式,MVC模式中的控制器主要关注的是应用程序流,输入数据的处理 ...
- Reflow、Repaint 性能优化
涉及到操作大量Dom节点及其样式时,有时感觉画面不顺畅,殊不知浏览器亚历山大了.所以我们心里面一定得清楚 Reflow(回流).Repaint(重绘). 浏览器根据每个Dom节点的样式,包括(大小,颜 ...
- Linux socket编程 DNS查询IP地址
本来是一次计算机网络的实验,但是还没有完全写好,DNS的响应请求报文的冗余信息太多了,不只有IP地址.所以这次的实验主要就是解析DNS报文.同时也需要正确的填充请求报文.如果代码有什么bug,欢迎指正 ...
- iOS开发网络篇-JSON文件的解析
一.什么是JSON数据 1.JSON的简单介绍 JSON:是一种轻量级的传输数据的格式,用于数据的交互 JSON是javascript语言的一个子集.javascript是个脚本语言(不需要编译),用 ...
- FPGA同步复位异步复位
今天看了篇博客, 是拿altera的芯片和软件作例子的,讲同步异步复位的: http://blog.sina.com.cn/s/blog_bff0927b0101aaii.html 还有一个博客, h ...
- .NET调用osql.exe执行sql脚本创建表和存储过程
using System;using System.Diagnostics;using System.Windows.Forms; namespace WindowsFormsApplication1 ...
- 转:java开发的10位牛人
文章来自于:http://it.deepinmind.com/java/2014/04/10/top-10-java-people-you-should-know.html James Gosling ...