我正在用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.");
begin
和end
更新意味着将操作合并为一个操作。结束更新将导致对图进行完整的验证。这里你只包装了每个原子操作,它们没有任何影响。
删除开始/结束,并在创建图形后放置开始,并在此代码段的底部放置结束,并尝试