gpt4 book ai didi

java - 使用 HashMap 对图进行深度复制不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 07:37:32 25 4
gpt4 key购买 nike

我有一个有向图,其边为 Map<E,Pair<V>> ,顶点为 <V> .

我想要此图表的副本,并在副本中进行一些更改,而原始图表不会更改。

我编写了两个不同的复制函数,copy1 和 copy2。第二个函数工作正常,但是,在 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);
}
}

最佳答案

使用这个方法,这样就可以完美的对所有新创建的对象进行deepCopy递归

public static <T extends Serializable> T deepCopy(T o) throws Exception
{
if (o == null)
return null;

ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);

oos.writeObject(o);
bos.close();
oos.close();

ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bis);

T t = (T) ois.readObject();
bis.close();
ois.close();
return t;
}

关于java - 使用 HashMap 对图进行深度复制不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16606874/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com