Java中List循环遍历的时候删除当前对象(自己)

方法一
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);  
13  结果:
14 Java代码  
15 [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);  
13  
14 结果:
15 Java代码  
16 Exception in thread "main" java.util.ConcurrentModificationException  
17     at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)  
18     at java.util.AbstractList$Itr.next(AbstractList.java:343)  
19     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);  
15 结果:
16     Java代码  
17     [one]  

 

结论:
删除还是用迭代器的比较好,其它的都会有问题.
posted @ 2021-11-23 16:54  小魚人  阅读(377)  评论(0编辑  收藏  举报