我正在编写一个算法来建立一个无向的对象图。在向图中的特定元素正确添加和删除边之后,我到达了某个点,我得到了这个错误。
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。为什么会这样?