JGraphX 构建图形需要很长时间

4

我正在使用JGraphX构建一个图形。与类似的图形实现(如JGraphT)相比,使用下面的代码构建需要很长时间。为什么会这样呢?顶点可以很快地创建,但是创建边缘的嵌套循环需要很长时间,尤其是当数组大小为1000时。

Vertex[] verts = new Vertex[1000]; // My own vertex class
mxCell[] cells = new mxCell[1000]; // From com.mxGraph.model.mxCell

// Create graph
mxGraph mx = new mxGraph(); // from com.mxgraph.view.mxGraph

// Create vertices
for(int i = 0; i < verts.length; i++)
{
    verts[i] = new Vertex(Integer.toString(i));
    cells[i] = new mxCell(verts[i]);
    mx.getModel().beginUpdate();
    mx.insertVertex(null, Integer.toString(i), cells[i], 1, 1, 1, 1);
    mx.getModel().endUpdate();
}
System.out.println("Vertices created.");

// Connect graph
Random r = new Random();
for(int j = 0; j < verts.length; j++)
{
    for(int k = 0; k < verts.length; k++)
    {
        if(k != j)
        {
            if(r.nextInt(5) == 0) // Random connections, fairly dense
            {
                mx.getModel().beginUpdate();
                mx.insertEdge(null, Integer.toString(k) + " " + Integer.toString(j), "", cells[j], cells[k]);
                mx.getModel().endUpdate();
            }
        }
    }
}
System.out.println("Finished graph.");
1个回答

1

beginend 更新是用于将操作组合成一个的。结束更新会导致对图形进行完整的验证。在这里,您只是包装每个原子操作,它们没有任何效果。

删除您所拥有的 begin/ends,然后在创建图形之后放置一个 begin,在此代码段底部放置 end 并尝试。


好的,没问题!这样就解决了。谢谢。 - sehcheese

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接