Java动态 遍历List 时删除List特征元素 异常问题 及解决方式总结
来源:互联网 发布:爱普生手机打印软件 编辑:程序博客网 时间:2024/06/05 05:32
首先,这是一个极其简单的问题,大牛可忽略,新手可能会遇到,Java中遍历某个List 时删除该List元素 会抛出异常。
这一个简单的问题再高手严重不值一提,但新手可能会比较困惑,用哪种方式可以安全有效的实现遍历list删除某些特征元素?
方式:
方法1、普通for循环 遍历List,删List除自身 特征条目;
方法2、高级for循环 遍历List,删除List自身 特定条目;
方法3、引入参考List,for循环遍历删除原List 特定条目;
方法4、利用iterator 遍历删除List特定条目
结论:
方法1:不会抛异常 但结果 未必正确 由于list.size()在变动 根据脚标删除的未必是 特征元素;
方法2:会抛异常 :java.util.ConcurrentModificationException;
java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:819)
at java.util.ArrayList$Itr.next(ArrayList.java:791)
方法3:可实现目的,通过引入一个参考list for循环遍历参考list 在循环过程中 满足条件出 删除原list条目,可以达到所需目的;
方法4:可实现目的,通过list.iterator();方法拿到iterator对象 调用iterator.remove();方法可达到所需目的且不会抛异常。
这个问题 最好亲自运行代码,尝试,方能更好理解。
不废话,上代码,自己运行一下便可:
package com.kevin.test;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import java.util.Random;/** * 动态删除 List 特征元素 示例 * * @author blj * */public class TestMain{static class Bean{private String name;public String getName(){return name;}public void setName(String name){this.name = name;}}/** * @param args */public static void main(String[] args){dynamicRemoveItemFromListDemo();}/** * 动态删除List元素示例 */public static void dynamicRemoveItemFromListDemo(){List<Bean> list = getList();System.out.println("原始数据:");printList(list);// 使用普通for循环遍历List删除自身元素 不报错 但结果 未必正确normalRemoveMethod(list);// 使用高级for循环遍历List删除自身元素 报错// try// {// superRemoveMethod(list);// }// catch (Exception e)// {// System.err.println("高级for循环报错:");// e.printStackTrace();// }// 引入参考List 遍历删除方法// referenceRemoveMethod(list);// iterator遍历删除方法// iteratorRemoveMethod(list);System.out.println("结果数据:");printList(list);}/** * 打印 List 方法 * * @param list */private static void printList(List<Bean> list){for (Bean item : list){System.out.print(item.getName() + " ");}System.out.println();}/** * 利用普通for循环遍历删除元素 * * @param list */private static void normalRemoveMethod(List<Bean> list){for (int i = 0; i < list.size(); i++){if (list.get(i).getName().equals("A")){list.remove(list.get(i));}}}/** * 利用高级for循环遍历删除元素(会报异常) * * @param list */private static void superRemoveMethod(List<Bean> list){// 方法一for (Bean item : list){if (item.getName().equals("A")){list.remove(item);}}}/** * 有效的for循环遍历删除元素(正常 达到预期目的) * * @param list */private static void referenceRemoveMethod(List<Bean> list){List<Bean> referenceList = new ArrayList<Bean>();referenceList.addAll(list);for (int i = 0; i < referenceList.size(); i++){if (referenceList.get(i).getName().equals("A")){list.remove(referenceList.get(i));}}}/** * 使用Iterator的方式也可以顺利删除和遍历 */public static void iteratorRemoveMethod(List<Bean> list){Iterator<Bean> it = list.iterator();while (it.hasNext()){Bean student = it.next();if (student.getName().equals("A"))it.remove();}}/** * 获取List方法 * * @return */private static List<Bean> getList(){List<Bean> list = new ArrayList<Bean>();for (int i = 0; i < 50; i++){Bean item = new Bean();int j = i + new Random().nextInt();if (j % 3 == 1){item.setName("A");}else if (j % 3 == 2){item.setName("B");}else{item.setName("C");}list.add(item);}return list;}}
- Java动态 遍历List 时删除List特征元素 异常问题 及解决方式总结
- Java动态遍历List 时删除List特征元素
- 总结遍历List时删除元素
- 遍历List删除元素问题
- java List删除元素问题及解决办法
- Java list集合通过遍历删除元素异常分析
- 遍历List时 删除元素
- 遍历List,删除元素
- java 遍历 删除元素 List Set
- Java List遍历中删除元素
- java 遍历 删除元素 List Set
- java中List遍历删除元素
- Java遍历List,删除自身元素
- java 遍历list、set时 删除元素 java.util.ConcurrentModificationException
- JAVA中关于遍历List时删除元素的实践
- HashMap和List遍历方法总结及如何遍历删除元素
- JAVA List 一边遍历一边删除元素,报java.util.ConcurrentModificationException异常
- list删除元素问题
- Java HashMap的工作原理
- spring初始化和销毁bean
- 深入理解jre,classload,类加载过程
- poj 2386 bfs
- 【连通图|强连通分量+最长路】POJ-3592 Instantaneous Transference
- Java动态 遍历List 时删除List特征元素 异常问题 及解决方式总结
- 面试1
- hdu2276---Kiki & Little Kiki 2(矩阵)
- Android笔记--ThreadLocal,Looper,Handler,Message,MessageQueue的关系
- Java线程:概念与原理
- 逗比验证码第二期 php代码
- 回归CSDN
- 确定一个二叉树是另一个二叉树的子树
- 使用Qt过程中遇到的问题