0

新しいグラフを変更しても最初のグラフに影響を与えないように、別のグラフにコピーしたいと考えています。値渡しでやっているのはわかっていますが、これを避けるにはどうすればよいでしょうか?

public Graph copyGraph(Graph initialGraph) {
    Graph newGraph = new Graph();
    for(int i = 0; i < initialGraph.getVerticesSize(); i++) {
        Vertex v2 = initialGraph.getVertices().get(i);          
        newGraph.getVertices().set(i, v2);
    }
    return newGraph;
}
4

4 に答える 4

1

あなたのコードは次の点を除いて見栄えがします。

Vertex v2 = initialGraph.getVertices().get(i);          
newGraph.getVertices().set(i, copyVertex(v2));

グラフのコピーと同様に、頂点もコピーする必要があります。グラフをコピーして同じ頂点を使用すると、実際のコピーは生成されません。

于 2013-02-26T15:08:39.150 に答える
0

Graph のコピー コンストラクターが適切に実装されている限り、initialGraphこの引数をコピーで渡すときに、既にその関数に渡す引数のコピーです。

また、これがどのように機能するか想像できません:

Graph newGraph = new Graph();

new Graph()Graph ではなく、グラフへのポインタを返します。

于 2013-02-26T15:05:34.330 に答える
0

clone()この場合、同じオブジェクトを参照しないようにするために、メソッドを使用します。

public Graph copyGraph(Graph initialGraph) {
     Graph newGraph = initialGraph.clone();
     for(int i = 0; i < initialGraph.getVerticesSize(); i++) {
          Vertex v2 = initialGraph.getVertices().get(i).clone();          
          newGraph.getVertices().set(i, v2);
     }
     return newGraph;
}

他のオブジェクトへの参照が含まれている場合Vertexは、それも複製する必要があり、deep copying.

編集

クラスはメソッドを実装Cloneableしてサポートする必要がありclone()ます。

public Object clone() {
    try {
        return super.clone();
    } catch (CloneNotSupportedException e) {
        return null;
    }
}
于 2013-02-26T15:12:45.547 に答える