オブジェクトの無向グラフを設定するアルゴリズムを書いています。グラフ内の特定の要素にエッジを正しく追加および削除した後、このエラーが発生する特定のポイントに到達します。
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.Collections$UnmodifiableCollection.add(Unknown Source)
at UndirectedGraph.addEdge(UndirectedGraph.java:81)
これは、プログラムが既にエッジをグラフに追加できるようにした後であり、オブジェクトを addEdge メソッドに入力する方法は何も変わっていないことに注意してください。addEdge のコードは次のとおりです。
private final Map<Object, Set<Object>> mGraph = new HashMap<Object, Set<Object>>();
public void addEdge(Object one, Object two) {
/* Confirm both endpoints exist. */
if (!mGraph.containsKey(one) || !mGraph.containsKey(two))
throw new NoSuchElementException("Both nodes must be in the graph.");
/* Add the edge in both directions. */
mGraph.get(one).add(two);
mGraph.get(two).add(one);
}
デバッガーの実行中に、コードの先頭で mGraph.get(one) が呼び出されたときに HashSet が返されるのに、エラーが発生すると Collections$UnmodifiableSet が返されることがわかりました。なぜこうなった?