下面可以删除list中所有的"java"的代码是,java删除list中的一条数据
目录
简介实例正确方法法1:对于的下标倒序遍历法2: list.stream().过滤器()。收集()法3:迭代器迭代器错误方法法1:对于(xxx : yyy)遍历法2:对于的下标正序遍历原因分析
简介
本文介绍爪哇的目录的正确的删除方法。
实例
需求:有如下初始数据,将目录中的所有数据为 b 的元素删除掉。即:填充移除乙()方法
包com。举例。a;导入Java。util。ArrayList导入Java。util。列表;public class Demo { public static void main(String[]args){ ListString list=new ArrayList();列表。添加( a );列表。添加( b );列表。添加( b );列表。add( c );列表。add( d );removeB(列表);}私有静态void removeB(ListString list) { //待填充}}
正确方法
法1:for的下标倒序遍历
私有静态void removeB(ListString list){ for(int I=list。size()-1;I=0;i - ) { if (b ).等于(列表。get(I))){ list。删除;} }系统。出去。println(列表);}结果
[阿、中、德]
法2: list.stream().filter().collect()
私有静态void removeB(ListString list){ ListString new list=list。流().过滤器(e -!乙.等于(戊)百分之五十.收藏(收藏者。to list());系统。出去。println(新列表);}结果
[阿、中、德]
法3: iterator迭代器
私有静态void removeB(list string list){ iterator string it=list。迭代器();而(它。has next()){ String s=it。next();if (b .等于(s)){ it。移除();} }系统。出去。println(列表);}结果
[阿、中、德]
错误方法
法1:for(xxx : yyy)遍历
private static void removeB(list String list){ for(String s : list){ if( b .等于(s)){ list。删除;} }系统。出去。println(列表);}结果(报异常)
线程“主”Java。跑龙套中出现异常
.ConcurrentModificationException at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:909) at java.util.ArrayList$Itr.next(ArrayList.java:859) at com.example.a.Demo.removeB(Demo.java:18) at com.example.a.Demo.main(Demo.java:14)
法2:for的下标正序遍历
private static void removeB(List<String> list) { for (int i = 0; i < list.size(); i++) { if ("b".equals(list.get(i))) { list.remove(list.get(i)); } } System.out.println(list);}
结果(有的没有删除掉)
[a, b, c, d]
原因分析
需求:通过遍历把list集合的所有数据删除掉。
package com.example.a; import java.util.ArrayList;import java.util.Iterator;import java.util.List;import java.util.stream.Collectors; public class Demo { private static List<String> list = new ArrayList<>(); public static void main(String[] args) { reset(); // method1(); // method2(); // method3(); // method4(); } private static void reset(){ list.clear(); list.add("a"); list.add("b"); list.add("c"); list.add("d"); list.add("e"); } /** * 方法一:遍历删除第i个元素(错误版) * 执行结果:没有完全删除。打印结果:[b, d] */ /** * 下面遍历操作过程如下: * i = 0 list.size() == 5 执行完第一次list.remove(0); list剩下[b,c,d,e] * i = 1 list.size() == 4 执行完第二次list.remove(1); list剩下[b,d,e] * i = 2 list.size() == 3 执行完第三次list.remove(2); list剩下[b,d] * i = 3 list.size() == 2 i > list.size()所以条件不满足,最后剩下[b,d] */ public static void method1() { for (int i = 0; i< list.size(); i++) { list.remove(i); } System.out.println(list); } /** * 方法二:删除第0个元素(错误版) * 执行结果:元素没有删除。打印结果:[d, e] */ /** * 下面遍历操作过程如下: * i = 0 list.size() == 5 执行完第一次list.remove(0); list剩下[b,c,d,e] * i = 1 list.size() == 4 执行完第二次list.remove(0); list剩下[c,d,e] * i = 2 list.size() == 3 执行完第三次list.remove(0); list剩下[d,e] * i = 3 list.size() == 2 i > list.size()所以条件不满足,最后剩下[d,e] */ public static void method2() { for (int i = 0; i< list.size(); i++) { list.remove(0); } System.out.println(list); } /** * 方法三:只取一次长度删除第i个(错误版) * 执行结果:报错。打印结果: * Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 2 */ /** * 只求取list.size()长度一次 * i == 0 len == 5 list.remove(0) list剩下[b,c,d,e] * i == 1 len == 5 list.remove(1) list剩下[b, d,e] * i == 2 len == 5 list.remove(2) list剩下[b, d] * i == 3 len == 5 list.remove(3) list因为没有第四个元素,于是报索引越界错误 */ public static void method3() { int len = list.size(); for (int i = 0; i < len; i++) { list.remove(i); } System.out.println(list); } /** * 方法四:只取一次长度删除第0个(正确版) * 执行结果:完全删除。打印结果:[] */ /** * 下面遍历操作过程如下: * i = 0 len == 5 执行完第一次list.remove(0); list剩下[b,c,d,e] * i = 1 len == 5 执行完第二次list.remove(0); list剩下[c,d,e] * i = 2 len == 5 执行完第三次list.remove(0); list剩下[d,e] * i = 3 len == 5 执行完第四次list.remove(0); list剩下[e] * i = 4 len == 5 执行完第五次list.remove(0); list剩下[] */ public static void method4() { int len = list.size(); // 保证只获取一次长度 for (int i = 0; i< len; i++) { list.remove(0); } System.out.println(list); }}
以上就是详解Java中List的正确的删除方法的详细内容,更多关于Java List删除方法的资料请关注盛行IT其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。