无论使用什么方式对List进行遍历,都不能直接对List<E>变量进行直接修改操作,比如:

List<String> strList = new ArrayList<String>();
strList.add("john");strList.add("mark");
strList.add("alen");strList.add("jason");
for(String strElem:strList)
{if(strElem.equals("john")){strList.add("Davien");}
}

上面的代码想在“john”后面添加“Davien”,但是很不幸,会抛出java.util.ConcurrentModificationException异常,就是因为对在循环中对strList变量进行直接修改。Iterator可以提供容器类的统一遍历方式,并且可以在遍历中使用remove方法删除元素,但是任然不能解决遍历时修改List的需求,ListIterator在Iterator的基础上添加的pre系列方法,可以实现反向操作,最重要的是添加了add和set方法,可以实现遍历List的时候同时进行添加,修改的操作。请看例子。

package cn.jnk.tools;import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;import org.junit.Test;/*** Unit test for simple App.*/
public class AppTest
{@Testpublic void ListTest(){boolean doExceptionTest = false;List<Phone> phones = new ArrayList<Phone>();phones.add(new Phone("111"));phones.add(new Phone("183"));phones.add(new Phone("182"));phones.add(new Phone("185"));System.out.println("原始数据");for(Phone phoneElem:phones){System.out.println(phoneElem.getNumber());}ListIterator<Phone> phoneIterator = phones.listIterator();while(phoneIterator.hasNext()){Phone tmpPhone = phoneIterator.next();if(tmpPhone.getNumber().equals("111")){tmpPhone.setNumber("666");phoneIterator.set(tmpPhone);phoneIterator.add(new Phone("132"));  // use ListIterator add item is ok}if(tmpPhone.getNumber().equals("183")){phoneIterator.remove();}if(doExceptionTest){phones.add(new Phone("170"));  // throw java.util.ConcurrentModificationException}}System.out.println("\n修改后正向遍历:");for(Phone phoneElem:phones){System.out.println(phoneElem.getNumber());}System.out.println("\n修改后反向遍历:");//反向遍历while(phoneIterator.hasPrevious()){System.out.println(phoneIterator.previousIndex() + ": "+phoneIterator.previous().getNumber());}}}class Phone
{private String number;public Phone(){}public Phone(String number){this.number = number;       }public String getNumber() {return number;}public void setNumber(String number) {this.number = number;}
}

输出结果如下:

使用ListIterator 对List遍历时修改,删除相关推荐

  1. java_基础_遍历map删除元素_Java 遍历Map(包括集合)时,修改删除元素

    转载自:https://blog.csdn.net/weixin_33498283/article/details/114071025 1.遍历Map集合的四种方法 public staticvoid ...

  2. 21、List遍历时修改元素的问题

    List迭代时修改元素的问题 请编写代码完成以下需求: 判断一个List里面是否包含monkey,如果包含的话,向集合中添加1024这个字符串.' package com.monkey1024.lis ...

  3. List集合遍历时如何删除元素

    背景:在业务中遍历某个集合时涉及到排除某个属性为0的情况,即遍历时删除. 一.3种错误方式演示三种: 1.foreach List<String> list = new ArrayList ...

  4. java利用循环打印AVA_ava.util.ArrayList在foreach循环遍历时可以删除元素

    ArrayList是java开发时非常常用的类,常碰到需要对ArrayList循环删除元素的情况.这时候大家都不会使用foreach循环的方式来遍历List,因为它会抛java.util.Concur ...

  5. 列表和字典循环遍历时的删除问题,集合

    1.for 循环的问题 : for 循环后面也有else,也可以使用break和continue(使用方法跟while一样). while    条件:                   for  ...

  6. java动态删除map元素报错_java map使用迭代器遍历时执行删除元素报空指针异常

    我建立了两个Map,其流程是遍历两个map,将map1中value值与map2中相同,但是K值不同的数据查找出来.然后把这条数据从Map2中删除.我使用迭代器在执行移除的时候是报空指针(java.la ...

  7. 【Java】遍历时优雅地删除集合元素

    实体类 import java.io.Serializable; import java.util.Objects;public class Person implements Serializabl ...

  8. C++中反向遍历map时怎样删除元素

    文章目录 前言 map的正向遍历 map 遍历时删除元素 map 的反向遍历 map 反向遍历时删除元素 总结 前言 今天在解决一个问题 <5710. 积压订单中的订单总数> 时用到了ma ...

  9. List如何在遍历时删除元素

    背景:业务中经常会涉及遍历list时对集合进行插入或者删除操作 一. 错误方式 先看看下面几段代码,1是foreach的方式去遍历list并删除元素,2是用迭代器的方式遍历list并删除元素,3是下标 ...

最新文章

  1. HttpClient 连接池设置引发的一次雪崩!
  2. 报名 | 第三期医工结合系列研讨会:科研领域的知识产权保护
  3. jieba分词中cut和lcut的区别
  4. zabbix的安装配置
  5. MVC Html.AntiForgeryToken() 防止CSRF***
  6. SegmentFault 技术周刊 Vol.16 - 浅入浅出 JavaScript 函数式编程
  7. linux根目录数量限制,windows,linux文件夹下文件上限最大个数
  8. 极客大学架构师训练营 大数据架构 MapReduce Yarn Hive SQL 第24课 听课总结
  9. the true story about using data mining to identify a relation between sales of beer and diapers
  10. 非线性控制2.0——鲁棒控制之H无穷控制器设计
  11. sip信令超时时间调整
  12. 计算机音乐恋曲1990字谱,歌曲恋曲1990简谱
  13. 【LEETCODE】【鱼缸难题】
  14. 元学习(Meta Learning)最全论文、视频、书籍资源整理
  15. vue-element换肤所有主题色和基础色均可自主配置
  16. 道里云公司网络虚拟化架构NVI技术开放源代码--序言
  17. python爬取高匿代理IP(再也不用担心会进小黑屋了)
  18. mp3计算机无法识别,MP3\MP4连接windows电脑后无法识别怎么办
  19. 企业项目实战k8s篇(十)Volumes配置管理
  20. 【PyTorch】随机种子 与 网络初始化

热门文章

  1. less 和 sass 配置
  2. Java之数组实现增删改
  3. 管理订单状态,该上状态机吗?轻量级状态机COLA StateMachine保姆级入门教程
  4. 公司新来了个00后测试工程师,一副毛头小子的样儿,哪想到是新一代卷王...
  5. 生活中的思维导图—读后感
  6. 解决无公网IP,远程访问黑群晖NAS
  7. 微信开发sdk非ipad协议(厉害)
  8. 远程办公新常态,为什么需要“零信任”模式?
  9. 删除docker里的的容器
  10. 单元测试和E2E测试