Java 如何在JGraphT中复制图形?

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... } 今年,我可以用手复制图表。 但是我想在一行中完成这项工作。无向图是一个界面。但是

我需要复制一张简单的图表

我在图形生成器中没有看到图形复制器 UndirectedGraph没有实现克隆方法

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;

但是,需要记住的是,如果图形太大,解决方案将具有较高的内存和计算复杂性。丢弃中间反转图形将改进解决方案。

这是完全错误的。它不会复制图形,也不会占用大量内存,因为它只是将所有调用委托给原始图形。