List remove操作注意问题
2013-08-14 21:50
351 查看
public static void main(String[] args) { // TODO Auto-generated method stub List<String> list = new ArrayList<String>(); list.add("A"); list.add("B"); list.add("C"); list.add("D"); list.add("E"); for(int i = 0;i<list.size();i++){ if(!"A".equals(list.get(i))){ list.remove(i); } } System.out.println("--查看结果--"); for(int i = 0;i<list.size();i++){ System.out.println(list.get(i)); } }
上面代码是要删除List集合中内容不为A的值
输出结果应该为A
可竟然是A C E
原因:List每remove掉一个元素以后,后面的元素都会向前移动,此时如果执行i=i+1,则刚刚移过来的元素没有被读取。
解决方法:
1、每移除一个元素以后再把i移回来
for(int i = 0;i<list.size();i++){
if(!"C".equals(list.get(i))){
list.remove(i);
i=i-1;
}
}
2、使用iterator.remove()方法删除
for(Iterator ite = list.iterator();ite.hasNext();){
if(!"C".equals(ite.next())){
ite.remove();
}
}
3.倒过来遍历list
for(int i = list.size()-1;i>=0;i--){ if(!"C".equals(list.get(i))){ list.remove(i); } }
注意:
如果for-each遍历时删除元素将报
Exception in thread "main" java.util.ConcurrentModificationException异常
for(String s:list){
if(!"C".equals(s)){
list.remove(s);
}
}
相关文章推荐
- List remove操作注意问题
- List remove操作注意问题
- List remove操作注意问题
- List remove中要注意的问题
- java中使用list.remove需要注意的问题
- list.remove需注意的问题
- list.remove()时出问题,集合的remove方法注意事项
- 使用List的remove方法需要的注意的问题
- list remove 操作要注意的地方
- python list循环remove操作的神奇问题 推荐
- 链表操作--- Remove Nth Node From End of List,注意事项整理
- List remove中要注意的问题
- List remove中要注意的问题
- List remove中要注意的问题
- 使用List中remove方法时需要注意的问题
- 关于PHP中操作MySQL数据库的一些要注意的问题
- hibernate复杂映射关系下的删除操作和list类型映射的注意点
- LeetCode 203 Remove Linked List Elements(链表操作)
- 【经验积累】JS,HTML DOM 在dom操作获取节点时,要注意文本节点的问题
- [WEB前端开发]-关于Velocity中Map与List操作-解决velocity无法识别Map对象key的问题