我在春季遇到了HashSet的问题。
每次我尝试使用removerTodosEnvolvidos()两次以上时,都会收到ConcurrentModificationException。 实际上,我不知道为什么会收到此错误,但是当我使用调试器时,每次看到错误时,for循环都会获取HashSet中的第一个元素,但此后他得到了异常。
我具有此属性和方法:
@ManyToMany
@JoinTable(name = "ETAPA_ENVOLVIDOS", joinColumns = @JoinColumn(name = "etapa_id"), inverseJoinColumns = @JoinColumn(name = "conta_id"))
private Set<Conta> envolvidos = new HashSet<>();
public void removerEnvolvido(Conta conta) {
this.envolvidos.remove(conta);
}
public void removerTodosEnvolvidos() {
if(!this.envolvidos.isEmpty()) {
for (Conta aux : this.envolvidos) {
removerEnvolvido(aux);
}
}
}
我搜索了此错误,并发现使用Iterator以及方法hasNext()和next(),但这对我不起作用。我必须更改的代码是这样的:
public void removerEnvolvido(Conta conta) {
Iterator<Conta> iter = this.envolvidos.iterator();
while(iter.hasNext()){
Conta aux = iter.next();
if(aux.equals(conta)) {
iter.remove();
}
}
//this.envolvidos.remove(conta);
}
连续错误:
java.util.ConcurrentModificationException: null
at java.util.HashMap$HashIterator.nextNode(Unknown Source) ~[na:1.8.0_181]
at java.util.HashMap$KeyIterator.next(Unknown Source) ~[na:1.8.0_181]
at org.hibernate.collection.internal.AbstractPersistentCollection$IteratorProxy.next(AbstractPersistentCollection.java:835) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]