2014-11-24 77 views
0

我想删除它在此ArrayList甚至有指数数字的字符串,使用“迭代”卸下摆臂。使用Java迭代器

import java.util.*; 
import static java.lang.System.out; 

class MAIN 
{ 
    public static void main(String args[]) 
    { 
     ArrayList<String> al = new ArrayList<String>(); 
     Iterator i = al.iterator(); 
     int len; 
     Scanner sc = new Scanner(System.in); 
     out.printf("Size:"); 
     len = sc.nextInt(); 

     while(len!=0) 
     { 
      al.add(sc.next()); 
      len -= 1; 
     } 

     Object o; 
     for(len = 0 ; len < al.size() ; len +=1) 
     { 
      out.println(al); 
      if(len%2==0) 
      { 
       o = i.next(); 
       out.println(o); 
       i.remove(); 
       i.next(); 
      } 
     } 


     return; 
    } 

} 

我在i.next();上得到“ConcurrentModificationException”。怎么了 ?

回答

5

您没有使用迭代器通过您的修正迭代,所以你不能用它来删除元素。要正确使用它,你必须循环使用迭代器本身。

for (Iterator<E> iter = list.iterator(); iter.hasNext();) { 
    E element = iter.next(); 
    // 1 - can call methods of element 
    // 2 - can use iter.remove() to remove the current element from the list 

    // ... 
} 

也许是这样的:

int count = 0; 
for (Iterator<String> iter = al.iterator(); iter.hasNext();) { 
    String element = iter.next(); 
    System.out.print(element); 
    if (count % 2 == 0) { 
     iter.remove(); 
     System.out.print(" -- has been deleted"); 
    } 
    System.out.println(); 
    count++; 
} 

另一种方法是通过您的收藏使用for循环来循环向后。因为移除项目已删除的项目之前将不会改变项目的顺序或索引这可以工作。

+0

听不懂你的最后一道防线。 – kesari 2014-11-24 05:53:10

0

使用一个Iterator,然后调用remove()在它:

Iterator<String> itr = list.iterator(); 

while (itr.hasNext()) { 

    String s = itr.next(); 
    if (Condition) 
    itr.remove(); 
}