删除元素哦HashSet里面的

时间:2012-02-03 15:29:45

标签: java hashset

我希望通过一个包含for (MyClass edg : myHashSet)for内部的HashSet,我想删除一个HashSet元素。

for (MyClass edg : myHashSet)
{
    if(....)
         myHashSet.remove();
}

但是有一个错误java.util.ConcurrentModificationException如何在parcour中删除一个元素?

3 个答案:

答案 0 :(得分:6)

您可以使用Iterator,而不是使用修改后的for循环。迭代器有一个remove方法,可以删除Iterator.next()返回的最后一个元素。

for (final java.util.Iterator<MyClass> itr = myHashSet.iterator(); itr.hasNext();) {
    final MyClass current = itr.next();
    if(....) {
        itr.remove();
    }
}

答案 1 :(得分:2)

阅读javadoc:

  

此类的迭代器方法返回的迭代器是快速失败的:如果在创建迭代器之后的任何时间修改了set,​​除了通过迭代器自己的remove方法之外,Iterator都会抛出ConcurrentModificationException。

使用Iterator及其remove()方法。

MyClass edg
Iterator<MyClass> hashItr = myHashSet.iterator();
while ( hashItr.hasNext() ) {
    edge = hashItr.next();
    if ( . . . )
        hashItr.remove();
}

答案 2 :(得分:0)

有一点想法,自从我做了java以来​​已经有一段时间了,但另一种标准方法是做到这一点:

Set<Person> people = new HashSet<Person>(); 
Set<Person> peopleToRemove = new HashSet<Person>(); 

// fill the set of people here.
for (Person currentPerson : people) { 
    removalSet.add(currentPerson); 
} 

people.removeAll(peopleToRemove);