2017-08-02 25 views
-1

此代碼應該創建一組數字(Set),將20個不同的數字放入其中,並從集合中移除大於1的所有數字。但是,當我運行它時發生錯誤:ConcurrentModificationException,ConcurrentModificationException在刪除時

public class Solution 
{ 
public static void main(String[] args) throws Exception 
{ 
    HashSet<Integer> a= createSet(); 
    a.addAll(removeAllNumbersMoreThan10(a)); 
    for (Integer nr: a) 
     System.out.println(nr); 

} 

public static HashSet<Integer> createSet() 
{ 
    //add your code here 
    HashSet<Integer> set = new HashSet<Integer>(); 
    for(int i = 0; i < 20; i++) 
    { 
     set.add(i); 
    } 


    return set; 

} 

public static HashSet<Integer> removeAllNumbersMoreThan10(HashSet<Integer> set) 
{ 
    //add your code here 
    for (Integer nr: set) 
    { 
     //System.out.println(nr); 
     if (nr > 10) 
     { 
      set.remove(nr); 
     } 
    } 
    return set; 

} 
} 

回答

1

迭代時,您不能modify集合,除非您使用iterator。更改removeAllNumbersMoreThan10到:

public static HashSet<Integer> removeAllNumbersMoreThan10(HashSet<Integer> set){ 
    //add your code here 
    for (Iterator<Integer> iterator = set.iterator(); iterator.hasNext();){ 
     //System.out.println(nr); 
     int nr = iterator.next(); 
     if (nr > 10){ 
      iterator.remove(); 
     } 
    } 
    return set; 
} 

此外,一對夫婦的其他建議:

  • removeAllNumbersMoreThan10並不需要修改的參數傳遞的集合。它需要創建一個新的集合,對其進行修改並返回。

  • a.addAll(removeAllNumbersMoreThan10(a));沒有意義,因爲Set無論如何刪除重複。它應該是HashSet<Integer> numbersLessThan10 = removeAllNumbersMoreThan10(a);

相關問題