-2

我使用此代码检查数组列表中的数据并删除相似之处,但我得到了 ConcurrentModificationException。这是解决所有问题后的最终代码:

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);       
    }
}
4

2 回答 2

1

您不能修改要迭代的同一数组。

您正在对 cmp 进行迭代并尝试对其进行修改。这是您的异常的原因。

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

改用迭代器

for (String s : cpr){
 Iterator<String> itr= cmp.iterator();
  while (itr.hasNext()){
   String t = itr.next();
     if (s.equals(t)){
        itr.remove();
    }
  }
}
于 2013-05-03T14:19:34.707 回答
0

原因是您在迭代数组时从数组中删除元素。这将导致 ConcurrentModificationExceptions。如果要在迭代时删除元素,最好使用内置的 java 迭代器功能和方法 remove()。

Iterator<String> iter = cmp.iterator();
while (iter.hasNext()){
    String t = iter.next();
    if (t.equals(s)){
        iter.remove();
    }
}
于 2013-05-03T14:21:06.273 回答