Java 如何在JGraphT中复制图形?
我需要复制一张简单的图表 我在图形生成器中没有看到图形复制器 UndirectedGraph没有实现克隆方法Java 如何在JGraphT中复制图形?,java,graph,jgrapht,Java,Graph,Jgrapht,我需要复制一张简单的图表 我在图形生成器中没有看到图形复制器 UndirectedGraph没有实现克隆方法 public void someMethod(UndirectedGraph g) { // Do some stuff... ((AbstractBaseGraph)g).clone(); // <== Your 1-liner // Do some more stuff... } 今年,我可以用手复制图表。 但是我想在一行中完成这项工作。无向图是一个界面。但是
public void someMethod(UndirectedGraph g)
{
// Do some stuff...
((AbstractBaseGraph)g).clone(); // <== Your 1-liner
// Do some more stuff...
}
今年,我可以用手复制图表。
但是我想在一行中完成这项工作。无向图是一个界面。但是,大多数具体的子类(例如SimpleGraph)都扩展了AbstractBaseGraph,后者实现了clone()方法 因此,如果可以保证手中的无向图继承自AbstractBaseGraph,只需转换为AbstractBaseGraph并调用clone方法
public void someMethod(UndirectedGraph g)
{
// Do some stuff...
((AbstractBaseGraph)g).clone(); // <== Your 1-liner
// Do some more stuff...
}
公共方法(无向图g)
{
//做些事情。。。
((AbstractBaseGraph)g.clone();//复制图形的非常粗糙(但很快)的解决方案是:
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;
DirectedGraph图形=新的DefaultDirectedGraph(DefaultEdge.class);
DirectedGraph revGraph=新的EdgeReversedGraph(图形);
DirectedGraph graphCopy=新的EdgeReversedGraph(revGraph);
//降低内存复杂度
revGraph=null;
但是,需要记住的是,如果图形太大,解决方案将具有较高的内存和计算复杂性。丢弃中间反转图形将改进解决方案。这是完全错误的。它不会复制图形,也不会占用大量内存,因为它只是将所有调用委托给原始图形。