我使用此代码检查arraylist中的数据并删除相似之处,但我得到了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);
}
}
答案 0 :(得分: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();
}
}
}
答案 1 :(得分:0)
你在迭代它时从数组中删除元素的原因。这将导致ConcurrentModificationExceptions。如果要在迭代时删除元素,最好使用内置的java迭代器功能和方法remove()。
Iterator<String> iter = cmp.iterator();
while (iter.hasNext()){
String t = iter.next();
if (t.equals(s)){
iter.remove();
}
}