java - how to add links or update existing links property to a JUNG graph -
i have result set coming mysql database , trying build jung graph using these values. have instantiated empty graph as:
graph<node, edge> g = new sparsemultigraph<>(); then have added nodes (586). in process of adding links , things more complicated. construction of custom border simple, has "time" property like:
multiset<timestamp> time; the result set links contains 3273684 entries in form:
id time sender receiver 12 2014-03-20 09:26:04.000 2 99 now, want create link node id 2 , node id 99 if link not exist, or add together timestamp existing link. is:
while (resultset.next()) { // retrieve sender node sender = findnode(resultset.getint("sender"), g); // retrieve receiver node receiver = findnode(resultset.getint("receiver"), g); // if linked if(g.ispredecessor(sender, receiver)){ // add together new timestamp existing link collection<edge> outedges = g.getoutedges(sender); // find right border for(edge e:outedges){ // if border connected receiver if(g.getdest(e).equals(receiver)){ // add together new timestamp border e.settime(resultset.gettimestamp("time")); } } } else { // else new link added info e = new information(); e.setid(resultset.getint("id")); e.settime(resultset.gettimestamp("time")); g.addedge(e, sender, receiver, edgetype.directed); } } my problem slow, , not understand if normal, since result set quite big, or if missing clearer/faster way implement need.
for sake of clarity, findnode() method this:
private static node findnode(int aint, graph<node, edge>g) { for(node n:g.getvertices()){ if(n.getid()== aint){ homecoming n; } } homecoming null; }
this slow 2 reasons:
(1) don't have efficient way node given id. graph of size i'd recommend building map populate graph, , using map implement findnode().
(2) 1 time have 2 nodes , want border connects them (if any), utilize graph.findedge().
(1) far biggest reason code slow. (2) not help much, create code easier read , more elegant.
java mysql jung
No comments:
Post a Comment