Java动态遍历List 时删除List特征元素
来源:互联网 发布:最强的国际象棋软件 编辑:程序博客网 时间:2024/06/04 19:04
用哪种方式可以安全有效的实现遍历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; } }
阅读全文
0 0
- Java动态遍历List 时删除List特征元素
- Java动态 遍历List 时删除List特征元素 异常问题 及解决方式总结
- 遍历List时 删除元素
- 遍历List,删除元素
- java 遍历 删除元素 List Set
- Java List遍历中删除元素
- java 遍历 删除元素 List Set
- java中List遍历删除元素
- Java遍历List,删除自身元素
- java 遍历list、set时 删除元素 java.util.ConcurrentModificationException
- JAVA中关于遍历List时删除元素的实践
- 总结遍历List时删除元素
- 遍历List删除元素问题
- List遍历中删除元素
- 遍历删除List中的元素
- 遍历删除List中的元素
- JAVA遍历List集合并删除其中的元素
- Java 循环遍历删除set list中的元素
- 介绍并实现简单的守护进程
- ubuntu16.04 64位系统安装php5.6
- java.toString() ,(String),String.valueOf的区别
- UT笔记:Junit 、PowerMock
- Linux下用户组、文件权限详解
- Java动态遍历List 时删除List特征元素
- myibatis 报错 Could not find result map java.util.HashMap
- Redis学习(五)Redis的持久化
- OpenMAX IL框架
- 如何使用Python递归遍历项目找出重复的图片资源
- isprime
- 自己的设计
- c#_属性加反射的玩法
- 卡方检验以及P值的计算