通常,当您在集合上循环时从集合中删除一个元素时,会收到Concurrent Modification
Exception。这部分是为什么Iterator接口具有remove()方法的原因。使用迭代器是遍历元素时修改元素集合的唯一安全方法。
该代码将是这样的:
Set<SomeClass> set = new HashSet<SomeClass>();fillSet(set);Iterator<SomeClass> setIterator = set.iterator();while (setIterator.hasNext()) { SomeClass currentElement = setIterator.next(); if (setOfElementsToRemove(currentElement).size() > 0) { setIterator.remove(); }}这样,您将安全地从setOfElementsToRemove()中删除所有生成删除集的元素。
编辑
根据对另一个答案的评论,这可能更是您想要的:
Set<SomeClass> set = new HashSet<SomeClass>();Set<SomeClass> removalSet = new HashSet<SomeClass>();fillSet(set);for (SomeClass currentElement : set) { removalSet.addAll(setOfElementsToRemove(currentElement);}set.removeAll(removalSet);


