2013-05-03 58 views
-2

我用這個代碼來檢查在一個ArrayList的數據,並移除相似之處,但我有一個ConcurrentModificationException的。這是解決所有問題後的最終代碼:我得到ConcurrentModificationException的同時處理的ArrayList

public class Aaa { 

    static ArrayList <String> cmp = new ArrayList<String>(); 
    static ArrayList <String> cpr = new ArrayList<String>(); 

    public static void clarify(ArrayList<String> cmp) { 

     for (int i = 0; i< cmp.size(); i++){ 
      cpr.add("null"); 
     } 
     java.util.Collections.copy(cpr, cmp); 
     for (String s : cpr){ 
      int j = 0; 
      Iterator<String> itr= cmp.iterator(); 
       while (itr.hasNext()){ 
       String t = itr.next(); 
       if (s.equals(t)){ 
        j++; 
        if (j > 1){ 
        itr.remove(); 
        } 
       } 
       } 
      } 
     for(String x : cmp){ 
      System.out.println(x); 
     } 
    } 

    public static void main(String args[]){ 

     cmp.add("hamada"); 
     cmp.add("ramzy"); 
     cmp.add("morsy"); 
     cmp.add("attres"); 
     cmp.add("hamada"); 
     cmp.add("el nenny"); 
     cmp.add("hamada"); 
     cmp.add("abbas"); 

     clarify(cmp);  
    } 
} 
+5

你有沒有谷歌這個呢?我只是四處狩獵爲解決對我來說異常的事情最好重複... – 2013-05-03 14:18:09

回答

1

您不能修改您正在迭代的同一個數組。

你迭代在CMP,並試圖修改相同。這是你例外的原因。

for (String s : cpr){ 
     for(String t : cmp){ 
      if (t.equals(s)){ 
       cmp.remove(t); 
      } 
     } 
    } 

使用iterator而不是

for (String s : cpr){ 
Iterator<String> itr= cmp.iterator(); 
    while (itr.hasNext()){ 
    String t = itr.next(); 
    if (s.equals(t)){ 
     itr.remove(); 
    } 
    } 
} 
+0

,但我也有一個問題,當我跑我發現,它刪除了所有從ArrayList中的元素,因爲它「爲確保程序「發現居住在其他ArrayList中的所有元素,但我想刪除重複的唯一 – 2013-05-03 15:04:53

+0

我已經找到了一個解決方案,這是上面的 – 2013-05-03 15:19:41

0

的原因是您去除數組元素,同時遍歷它。這將導致ConcurrentModificationExceptions。如果要在迭代時刪除元素,最好使用內置的java迭代器功能和remove()方法。

Iterator<String> iter = cmp.iterator(); 
while (iter.hasNext()){ 
    String t = iter.next(); 
    if (t.equals(s)){ 
     iter.remove(); 
    } 
} 
+0

這解決了我的異常事情的編輯的代碼,但我也有一個問題,當我跑我發現,它刪除了所有從ArrayList中的元素,因爲它「肯定」發現居住在其他ArrayList中的所有元素的程序,但我想刪除重複的唯一 – 2013-05-03 15:05:40

+0

我已經找到了一個解決方案,它的上面編輯的代碼 – 2013-05-03 15:17:31

相關問題