Java中List循环遍历的时候删除当前遍历对象
来源:互联网 发布:ios 播放网络视频 编辑:程序博客网 时间:2024/06/02 00:45
最有效的方法:
public class Test { public static void main(String args[]){ List<String> list = new ArrayList<String>(); list.add("a"); list.add("b"); list.add("b"); list.add("c"); list.add("b"); Iterator<String> iter = list.iterator(); while(iter.hasNext()){ String s = iter.next(); if(s.equals("b")){ iter.remove(); } } System.out.println(list); }}
输出:
[a, c]
其他两种方法虽然可以删除,但是会有bug:
方法一:
public class Test { public static void main(String args[]){ List<String> list = new ArrayList<>(); list.add("a"); list.add("b"); list.add("b"); list.add("c"); list.add("c"); list.add("b"); for(int i=0;i<list.size();i++){ if(list.get(i).equals("b")){ list.remove(i); } } System.out.println(list); }}输出:
[a, b, c, c]
原因:当i=1时候,list删除掉一项,此时list.size()=5,下一个循环i=2,此时size为5的list为[a,b,c,c,b],i=2是list.get(2)=“c”,所以有一个b被忽略掉啦。’
方法二:
public class Test { public static void main(String args[]) { List<String> list = new ArrayList<>(); list.add("a"); list.add("b"); list.add("b"); list.add("c"); list.add("c"); for (String s : list) { if (s.equals("b")) { list.remove(s); } } System.out.println(list); }}报错:
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
at java.util.ArrayList$Itr.next(ArrayList.java:851)
at com.chinook5.util.Test.main(Test.java:17)
这是由于增强for循环底层调用的是迭代器的next和hasnext方法来遍历的,移除元素后,无法预知到元素的位置。这也是增强for的缺点,不能获取下标,不能动态删除集合中的内容。
改进:
public class Test { public static void main(String args[]) { List<String> list = new ArrayList<String>(); list.add("a"); list.add("b"); list.add("b"); list.add("c"); list.add("b"); List<String> list_remove = new ArrayList<String>(); for(String s : list){ if("b".equals(s)){ list_remove.add(s); //把要移除的统一放在一个集合 } } //统一移除 list.removeAll(list_remove); System.out.println(list); }}
输出:[a,c]
阅读全文
0 0
- Java中List循环遍历的时候删除当前遍历对象
- Java遍历List的时候删除item
- 遍历的时候删除List
- 遍历的时候删除List
- List 遍历的时候删除Item
- java中循环遍历删除List和Set集合中元素的方法
- java 循环遍历List
- Java List遍历中删除元素
- java中List遍历删除元素
- Java 中list和map遍历删除
- Java中List遍历删除以及Map的输出方法
- JAVA中关于遍历List时删除元素的实践
- Java中 List的遍历
- Java中 List的遍历
- java中List的遍历
- java中List的遍历
- java中List的遍历
- list遍历的时候,删除某个符合条件的元素
- Windows server 2012 搭建VPN图文教程
- Winform TreeView 节点拖动
- PDF文件转DWG文件用CAD转换器可以操作吗?
- Android多渠道打包以及发布方法
- 15个免费遥感影像数据源
- Java中List循环遍历的时候删除当前遍历对象
- jQuery EasyUI DataGrid根据 多个 字段动态合并单元格 ,级连合并
- 三阶贝塞尔曲线公式计算坐标
- C++自由存储区内存分配
- 关于关闭弹窗
- Unity 一个方法调用用一个类的方法
- Spring IOC源码详解之容器初始化
- 用stm32cubemx点亮一个流水灯
- mac源码安装tensorflow