Java在循环中删除集合中的元素
2016-08-07 11:40
323 查看
在循环中删除集合中的元素Java
使用循环索引
使用for-each
通过一个示例来说明:在一个list从存放了0~14这些数字,要把其中在[6,10]去区间内的数字删除
分析:结果并不是预期的结果,这是因为在remove元素的过程中,后面元素的索引也会相应的-1,比如把5这个元素remove掉,下一个元素的索引变成了5之前的索引,i继续递增就会导致该下一个元素会被跳过
正确的方式
在remove元素之后要把索引-1
结果抛出了异常,意思是不允许多线程的调用
Java中for-each实际上使用的是Iterator进行处理的,而Iterator是不允许集合在Iterator使用期间删除的
正确的方式
使用Iterator进行迭代,并调用Iterator的remove()方法
使用循环索引
使用for-each
在循环中删除集合中的元素(Java)
注:本人编程菜鸟,只是把编程过程中遇到的问题和想到的解决方案分享出来……通过一个示例来说明:在一个list从存放了0~14这些数字,要把其中在[6,10]去区间内的数字删除
使用循环+索引
错误的方式import java.util.ArrayList; import java.util.List; /** * Created by pokerface_lx on 16/8/6. */ public class Test { public static void main(String[] args) { List<Integer> list = new ArrayList<>(); for (int i = 0; i < 15; i++) { list.add(i); } for (int i = 0; i < list.size(); ++i) { if (list.get(i) >=5 &&list.get(i)<=10) { list.remove(i); } } System.out.println(list); } }
分析:结果并不是预期的结果,这是因为在remove元素的过程中,后面元素的索引也会相应的-1,比如把5这个元素remove掉,下一个元素的索引变成了5之前的索引,i继续递增就会导致该下一个元素会被跳过
正确的方式
在remove元素之后要把索引-1
import java.util.ArrayList; import java.util.List; /** * Created by pokerface_lx on 16/8/6. */ public class Test { public static void main(String[] args) { List<Integer> list = new ArrayList<>(); for (int i = 0; i < 15; i++) { list.add(i); } for (int i = 0; i < list.size(); ++i) { if (list.get(i) >=5 &&list.get(i)<=10) { list.remove(i); --i; } } System.out.println(list) } }
结果: [0, 1, 2, 3, 4, 6, 8, 10, 11, 12, 13, 14]
使用for-each
错误的方式import java.util.ArrayList; import java.util.List; /** * Created by pokerface_lx on 16/8/6. */ public class Test { public static void main(String[] args) { List<Integer> list = new ArrayList<>(); for (int i = 0; i < 15; i++) { list.add(i); } for (Integer i : list) { if (i >= 5 && i <= 10) { list.remove(i); } } 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)
结果抛出了异常,意思是不允许多线程的调用
Java中for-each实际上使用的是Iterator进行处理的,而Iterator是不允许集合在Iterator使用期间删除的
正确的方式
使用Iterator进行迭代,并调用Iterator的remove()方法
import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** * Created by pokerface_lx on 16/8/6. */ public class Test { public static void main(String[] args) { List<Integer> list = new ArrayList<>(); for (int i = 0; i < 15; i++) { list.add(i); } Iterator iterator = list.iterator(); while (iterator.hasNext()) { int num = (int) iterator.next(); if (num >= 5 && num <= 10) { iterator.remove(); } } System.out.println(list); } }
相关文章推荐
- Java中如何循环删除一个集合(如List)中的多个元素
- 循环的时候如何安全地删除java集合的元素
- Java中如何循环删除一个集合(如List)中的多个元素
- Java中如何循环删除一个集合(如List)中的多个元素
- Java中如何循环删除一个集合(如List)中的多个元素
- Java中如何循环删除一个集合(如List)中的多个元素
- java中循环遍历删除List和Set集合中元素的方法(推荐)
- java集合循环中删除元素问题以List集合为例
- java中循环遍历删除List和Set集合中元素的方法
- Java中集合循环删除元素的问题
- java中如何在循环中准确删除集合中的某个元素,并且不引起错误
- Java中如何循环删除一个集合(如List)中的多个元素
- java循环中如何删除集合中的元素
- java中循环遍历删除List和Set集合中元素的方法
- Java中如何循环删除一个集合(如List)中的多个元素
- 遍历集合时删除元素,抛出java.util.ConcurrentModificationException的解决办法
- 犯了一个菜鸟必备的很郁闷的错误:for循环删除LinkedList集合中元素
- 实现不用循环,删除集合中的重复(任意)元素
- JAVA循环迭代中删除或添加集合数据报java.util.ConcurrentModificationException错误