我需要复制一个简单的图表。
我没有在图形生成器中看到图形复制器 和UndirectedGraph没有实现克隆方法。
年,我可以手工复制图表。 但我想在一行中做到这一点。
答案 0 :(得分:1)
UndirectedGraph是一个界面。但是,大多数具体的子类(例如SimpleGraph)扩展了AbstractBaseGraph,它实现了clone()方法。
因此,如果您可以保证手中的UndirectedGraph继承自AbstractBaseGraph,只需转换为AbstractBaseGraph并调用clone方法。
public void someMethod(UndirectedGraph g)
{
// Do some stuff...
((AbstractBaseGraph)g).clone(); // <== Your 1-liner
// Do some more stuff...
}
请记住,according to the JavaDoc,clone()方法执行浅层克隆。因此克隆了图形实例,但其中的顶点和边缘不是。
答案 1 :(得分:0)
复制图表的一个非常粗略(但很快)的解决方案是:
DirectedGraph<String, DefaultEdge> graph = new DefaultDirectedGraph<String, DefaultEdge>(DefaultEdge.class);
DirectedGraph<String, DefaultEdge> revGraph = new EdgeReversedGraph<>(graph);
DirectedGraph<String, DefaultEdge> graphCopy = new EdgeReversedGraph<>(revGraph);
//To reduce the memory complexity
revGraph = null;
然而,要记住,解决方案将具有高内存和如果图形太大,计算复杂度。丢弃中间反转图将改善解决方案。