【转】ArrayList遍历的同时删除----不错

原文网址:http://javag.iteye.com/blog/403097

方法一

Java代码  

  1. ArrayList<String> list = new ArrayList<String>();
  2. list.add("one");
  3. list.add("two");
  4. list.add("two");
  5. list.add("two");
  6. list.add("two");
  7. for(int i=0;i<list.size();i++){
  8. if(list.get(i).equals("two")){
  9. list.remove(i);
  10. }
  11. }
  12. System.out.println(list);

结果:

Java代码  

  1. [one, two, two]

方法二

Java代码  

  1. ArrayList<String> list = new ArrayList<String>();
  2. list.add("one");
  3. list.add("two");
  4. list.add("two");
  5. list.add("two");
  6. list.add("two");
  7. for(String s:list){
  8. if(s.equals("two")){
  9. list.remove(s);
  10. }
  11. }
  12. System.out.println(list);

结果:

Java代码  

  1. Exception in thread "main" java.util.ConcurrentModificationException
  2. at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
  3. at java.util.AbstractList$Itr.next(AbstractList.java:343)
  4. at Test.main(Test.java:22)

方法三:

Java代码  

  1. ArrayList<String> list = new ArrayList<String>();
  2. list.add("one");
  3. list.add("two");
  4. list.add("two");
  5. list.add("two");
  6. list.add("two");
  7. Iterator<String> iter = list.iterator();
  8. while(iter.hasNext()){
  9. String s = iter.next();
  10. if(s.equals("two")){
  11. iter.remove();
  12. }
  13. }
  14. System.out.println(list);

结果:

Java代码  

  1. [one]

结论:

删除还是用迭代器的比较好,其它的都会有问题.

时间: 2024-10-11 00:53:49

【转】ArrayList遍历的同时删除----不错的相关文章

ArrayList遍历的同时删除

http://javag.iteye.com/blog/403097 ArrayList遍历的同时删除 博客分类: 随笔 Javathread 方法一 Java代码   ArrayList<String> list = new ArrayList<String>(); list.add("one"); list.add("two"); list.add("two"); list.add("two");

Java动态 遍历List 时删除List特征元素 异常问题 及解决方式总结

首先,这是一个极其简单的问题,大牛可忽略,新手可能会遇到,Java中遍历某个List 时删除该List元素 会抛出异常. 这一个简单的问题再高手严重不值一提,但新手可能会比较困惑,用哪种方式可以安全有效的实现遍历list删除某些特征元素? 方式: 方法1.普通for循环 遍历List,删List除自身 特征条目: 方法2.高级for循环 遍历List,删除List自身 特定条目: 方法3.引入参考List,for循环遍历删除原List 特定条目: 方法4.利用iterator 遍历删除List特

Java遍历List并删除某些元素

Java遍历List并删除某些元素 ? 在阿里的Java编程规约中有一条:[强制]不要在foreach循环里进行元素的remove/add操作.remove元素请使用Iterator方式,如果并发操作,需要对Iterator对象加锁. ? 这里不禁要问为什么? ? 首先来试一下,遍历List时删除元素究竟行不行: public class IteratorTest { public static void singleThreadRemove1(){ List<String> list = n

C#遍历List并删除某个元素的方法

C#遍历List并删除某个元素的方法,你的第一反应使用什么方法实现呢?foreach? for? 如果是foreach,那么恭喜你,你答错了.如果你想到的是用for,那么你只是离成功进了一步. 正确的做法是用for倒序遍历,根据条件删除.下面我们用代码来演示foreach,for删除list数据的情况: class Program { public class Students { public string Name { get; set; } public int Age { get; se

C#遍历List并删除某个或者几个元素的方法

C#遍历List并删除某个或者几个元素的方法,你的第一反应使用什么方法实现呢?foreach? for? 如果是foreach,那么恭喜你,你答错了.如果你想到的是用for,那么你只是离成功进了一步. 正确的做法是用for倒序遍历,根据条件删除.下面我们用代码来演示foreach,for删除list数据的情况: class Program { public class Students { public string Name { get; set; } public int Age { get

Python遍历列表时删除元素

无论是使用for还是while,当在从前往后遍历的同时删除列表中的元素时,都会发生些问题. 要从lst = [1,4,0,1,5,0,3,5]中删除所有0元素,有两个比较好的方法: 1 使用filter: lst = filter(lambda x : x != 0, lst) 2 使用列表解析: lst = [x for x in lst if x != 0] 这两种方式既简洁,可读性又好 ref: https://segmentfault.com/a/1190000007214571 原文地

Python的list循环遍历中,删除数据的正确方法

在遍历list,删除符合条件的数据时,总是报异常,代码如下: 1 num_list = [1, 2, 3, 4, 5] 2 print(num_list) 3 4 for i in range(len(num_list)): 5 if num_list[i] == 2: 6 num_list.pop(i) 7 else: 8 print(num_list[i]) 9 10 print(num_list) 会报异常:IndexError: list index out of range 原因是在删

典型问题分析3—LinkList中遍历操作与删除操作混合使用

LinkList中遍历操作与删除操作混合使用 删除成功后,list.current()返回什么值? #include <iostream> #include "LinkList.h" using namespace std; using namespace DTLib; int main() { LinkList<int> list; for(int i=0; i<5; i++) { list.insert(i); } for(list.move(0);

遍历list集合删除指定元素方法

今天的在项目中犯的一个错误记录一下: 刚开始粗心写成for喜欢遍历 这样会出现下表越界的问题 应该是iterate遍历移除集合中的元素 以下是转载: 一种错误的方式: for(int i = 0 , len= list.size();i<len;++i){     if(list.get(i)==XXX){          list.remove(i);     }   } 上面这种方式会抛出如下异常: Exception in thread "main" java.lang.