遍历List集合的时候删除单个(多个)元素(解决并发异常)
2016-11-21 17:25
225 查看
假设现在已经有一个大小为5的List集合[“一”,”二”,”三”,”四”]
我现在遍历的时候想删除其中指定的一个元素,使用普通for循环和增强for都会出现异常
使用Iterator去操作集合,才能正常删除和遍历元素
public List<String> init(){ list = new ArrayList<String>(); list.add("一"); list.add("二"); list.add("三"); list.add("四"); return list; }
我现在遍历的时候想删除其中指定的一个元素,使用普通for循环和增强for都会出现异常
//增强for移除元素"二" public void useForeachMove1(List l){ for(Object o : l){ if("二".equals(o.toString())){ l.remove(o); } System.out.println(o); } } result: 一 二 Exception in thread "main" java.util.ConcurrentModificationException 因为已经改变了集合的size,所以再去访问的时候就并发异常了
//使用普通for循环遍历,虽然不会并发异常,但是由于索引和size大小在移除的时候就会发生变化,所以容易数组越界 public void useNormalForMove1(List l){ for(int i = 0;i < l.size();i++){ if("四".equals(l.get(i))){ l.remove(i); } System.out.println(l.get(i)); } } result: 一 二 三 Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 3
使用Iterator去操作集合,才能正常删除和遍历元素
public void useIteratorMove1(List l){ Iterator<String> it = l.iterator(); while(it.hasNext()){ String str = it.next(); if(str.equals("二")||str.equals("四")){ it.remove(); } System.out.println(it.next()); } }
相关文章推荐
- list,set等集合遍历时,不能remove集合中的元素。需要new一个Object或者list,set,里面add需要删除的元素,等集合遍历完了进行remove(Object)或者removeAll(list/set)操作
- 【Java】集合(List、Set、Map)遍历、删除、比较元素时的小陷阱
- 怎么在遍历的时候删除List元素呢?
- java中循环遍历删除List和Set集合中元素的方法
- 在list集合中的添加、修改、删除和遍历元素
- Java集合之List遍历找到匹配元素删除方法总结
- List遍历的时候将其中的元素删除掉
- 如何正确在集合遍历的时候删除多个元素
- List集合删除元素的时候删除不掉
- 集合遍历的时候删除List
- java中循环遍历删除List和Set集合中元素的方法
- java中循环遍历删除List和Set集合中元素的方法(推荐)
- Java集合之List遍历找到匹配元素删除方法总结
- 遍历集合时删除元素,抛出java.util.ConcurrentModificationException的解决办法
- 在遍历集合的时候删除集合中的元素
- 如何在遍历list集合中删除list集合中的元素
- List集合删除元素的时候删除不掉
- list遍历的时候,删除某个符合条件的元素
- 循环遍历list的时候删除list的元素报错
- Java 集合(List、Set)遍历、判断、删除元素时的小陷阱