Map<E,Pair<V>>
エッジが、頂点が である有向グラフがあります<V>
。
このグラフのコピーを作成し、元のグラフは変更せずにコピーに変更を加えたいと考えています。
copy1 と copy2 という 2 つの異なるコピー関数を作成しました。2 番目の関数は問題なく動作しますが、copy1 では、コピー グラフから頂点を削除すると、元のグラフからも削除されます。copy1 の問題点と、グラフの高速コピーを作成する方法を教えてください。
public Graph<V> copy1() {
Graph<V> g = new Graph<V>();
g.vertices.putAll(super.vertices);
g.edges.putAll(super.edges);
return g;
}
public static void copy2(IGraph<E> graph, IGraph<E> copy) {
assert (copy.getVertexCount() == 0);
for (E resource : graph.getVertices()) {
copy.addVertex(resource);
}
for (Edge edge : graph.getEdges()) {
Pair<E> endpoints = graph.getEndpoints(edge);
copy.addEdge(edge, endpoints);
}
}