ConcurrentModificationException错误
有人能帮我解决代码问题吗?错误是:ConcurrentModificationException错误,exception,Exception,有人能帮我解决代码问题吗?错误是: Exception in thread "main" java.util.ConcurrentModificationException at java.util.HashMap$HashIterator.nextEntry(HashMap.java:894) at java.util.HashMap$KeyIterator.next(HashMap.java:928) at javaTest.Main.main(Main.java:1
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:894)
at java.util.HashMap$KeyIterator.next(HashMap.java:928)
at javaTest.Main.main(Main.java:18)
代码是:
public static void main(String arg[]) {
job.add("a");
job.add("b");
HashSet<String> klonasOnJob = job;
for (String p : klonasOnJob) {
if (p != "b") {
} else {
job.remove(p);
}
}
publicstaticvoidmain(字符串arg[]){
工作。添加(“a”);
工作。添加(“b”);
HashSet klonasOnJob=job;
for(字符串p:klonasOnJob){
如果(p!=“b”){
}否则{
删除(p);
}
}
如果在迭代集合时修改集合(在您的情况下,通过删除元素),大多数集合将中断并抛出ConcurrentModificationException
。请改用迭代器的remove()
方法
在您的情况下,相关片段将是:
Iterator<String> it = klonasOnJob.iterator();
while (it.hasNext()) {
String p = it.next();
if (p != "b") {
} else {
it.remove();
}
}
Iterator it=klonasOnJob.Iterator();
while(it.hasNext()){
字符串p=it.next();
如果(p!=“b”){
}否则{
it.remove();
}
}
但我在迭代时并没有修改集合,我创建了另一个HashMap并将其内容复制到另一个HashSet klonasOnJob=job;job.remove(p)你只设置了引用<代码> KLoason JooWors/Cuth>指向与“代码>作业 >相同的对象——这就是java中的赋值:它只是复制引用,而不是像C++那样创建对象的副本。因此,基本上通过删除这个行作业。;我从job和klonasOnJob中删除,对吗?是的,只是两个名字都指向同一个对象。