ArrayList的几种遍历和删除
来源:互联网 发布:三星手机 数据恢复 编辑:程序博客网 时间:2024/06/06 08:49
建议使用迭代器来删除list中指定的元素
1.普通for循环
public static void main(String[] args) { List<String> list=new ArrayList<String>(); list.add("one"); list.add("two"); list.add("two"); list.add("two"); list.add("two"); for(int i=0;i<list.size();i++){ if(list.get(i).equals("two")){ list.remove(i); } } System.out.println(list); }
输出结果:
[one, two, two]
分析:
list中有四个”two”,但是为什么结果还有2个”two”呢?
普通for遍历,当遍历到第一个”two”的时候匹配上, 删除第一个”two”。这时候,索引指向下一个”two”,并执行i++操作,从而导致第二个”two”没法被删掉。
改进方法:
for (int i = 0; i < list.size(); i++) { if(list.get(i).equals("two")){ list.remove(i); i--; }
为避免错误,不建议使用这种方法来处理。建议使用迭代器来删除指定元素。
第二种方法 增强for
public static void main(String[] args) { List<String> list=new ArrayList<String>(); list.add("one"); list.add("two"); list.add("two"); list.add("two"); list.add("two"); for(String s:list){ if(s.equals("two")){ list.remove(s); } } System.out.println(list); }
输出结果:
Exception in thread “main” java.util.ConcurrentModificationException
分析:增强for循环不能对集合本身进行操作
第三种方法 迭代器
public static void main(String[] args) { List<String> list=new ArrayList<String>(); list.add("one"); list.add("two"); list.add("two"); list.add("two"); list.add("two"); //这里使用ListIterator也可以删除成功 Iterator<String> iterator=list.iterator(); while (iterator.hasNext()){ String s=iterator.next(); if(s.equals("two")){ iterator.remove(); } } System.out.println(list); }
输出结果:
[one]
分析:
而迭代器不会有这样的问题是因为hasNext()方法,原理是指针向后移动,每运行一次it.next(),指针向后移动一次,一个一个的遍历。
阅读全文
0 0
- ArrayList的几种遍历和删除
- ArrayList和hashMap的几种遍历方法
- ArrayList遍历的同时删除
- ArrayList遍历的同时删除
- ArrayList的遍历删除问题
- arrayList遍历的同时删除
- 关于ArrayList和LinkedList的插入,遍历,删除时间比照
- ArrayList和LinkedList的几种循环遍历方式及性能对比分析
- ArrayList和LinkedList的几种循环遍历方式及性能对比分析
- ArrayList和LinkedList的几种循环遍历方式及性能对比分析
- ArrayList和LinkedList的几种循环遍历方式及性能对比分析
- ArrayList和LinkedList的几种循环遍历方式及性能对比分析
- ArrayList和LinkedList的几种循环遍历方式及性能对比分析
- ArrayList和LinkedList的几种循环遍历方式及性能对比分析
- ArrayList和LinkedList的几种循环遍历方式及性能对比分析
- ArrayList和LinkedList的几种循环遍历方式及性能对比分
- ArrayList和LinkedList的几种循环遍历方式及性能对比分
- ArrayList和LinkedList的几种循环遍历方式及性能对比分析
- 为啥出现个段错误 求解决方法 在线等哦
- this--浅析
- 金山C++开发笔试
- HTML入门的淘宝注册网页制作
- 二十种实战调优MySQL性能优化的经验
- ArrayList的几种遍历和删除
- Ext JS 容器Containers
- kotlin学习day5:数据类
- 今天学习内容
- 3223: Tyvj 1729 文艺平衡树
- 找第一个只出现一次的字符
- 【netbeans】Your active platform is: JDK_1.6, but the corresponding property...怎么解决
- Shell简单笔记
- jQuery实现二级联动