2012-03-24 5 views
0

可能性の重複:
ConcurrentModificationException and a HashMapjava.util.ConcurrentModificationExceptionが

次のコード

を実行しながら、私は次の例外

Exception in thread "main" java.util.ConcurrentModificationException 
at java.util.TreeMap$PrivateEntryIterator.nextEntry(Unknown Source) 
at java.util.TreeMap$KeyIterator.next(Unknown Source) 
at Types$AdjList.makeConnected(Types.java:281) 
at Main.main(Main.java:56) 

を取得しています

public void makeConnected() { 
     TreeSet<Node> exploredNodes = new TreeSet<Node>(); 
     TreeSet<Node> unexploredNodes = new TreeSet<Node>(); 
for (Node n : unexploredNodes) { 
     ... 
     exploredNodes.add(n); 
     unexploredNodes.remove(n); 
     ... 
} 

私はHashMapのようなイテレータを使用していませんが、何らかの条件に基づいて拡大または縮小する可能性のあるSetを使用する必要があります。 私はすべての回答を受け入れてポイントを与えます。 ConcurrentModificationExceptionが のこの問題を解決する方法に返信する方法を楽しみにしてforループザ・おかげで、 Somnath

+0

@assylias:しかし、TreeSetのためのiterator.removeは()がない:[OK]を、私はTreeSetの – somnathchakrabarti

+0

@assyliasのイテレータがある参照してください。イテレータを使ってTreeSetから削除する方法を知っていますか? – somnathchakrabarti

+2

すべてのイテレータにはremoveメソッドがあります。上のリンクの最初の答えの2番目のコードを確認し、セットでマップを置き換えます。 – assylias

答えて

4

は内部イテレータを使用して、あなたはイテレータを使用して要素を削除されていません。したがって、問題です。以下のように反復子のremoveメソッドを使用します。

for (Iterator iterator = exploredNodes.iterator(); iterator.hasNext();) { 
    Node n = (Node) iterator.next(); 
    unexploredNodes.add(n);   
    iterator.remove(); 
} 
+0

iterator.hasNext()を使用できません。メッセージをポップしています:HTMLDocument.Iterator型のhasNext()メソッドは未定義です。 – somnathchakrabarti

関連する問題