Graph 对象区分

Graph 对象区分,graph,Graph,我正在通过读取一个格式为的文件来创建一个包含节点(具有整数值)和边(源、目标和权重)的图形 1511 1 722 1771 等等 Set nodes=newhashset()//图的一组节点 ArrayList nodeList=新的ArrayList(); ArrayList edgeList=新的ArrayList(); ... Node node1=新节点(Integer.parseInt(temprerelation[0]); Node node2=新节点(Integer.parseIn

我正在通过读取一个格式为的文件来创建一个包含节点(具有整数值)和边(源、目标和权重)的图形

1511

1 722

1771

等等

Set nodes=newhashset()//图的一组节点
ArrayList nodeList=新的ArrayList();
ArrayList edgeList=新的ArrayList();
...
Node node1=新节点(Integer.parseInt(temprerelation[0]);
Node node2=新节点(Integer.parseInt(temprerelation[1]);
nodes.add(node1);
nodes.add(node2);
Edge-Edge=新边(node1、node2、Integer.parseInt(temprerelation[2]);
边列表。添加(边);
}
类节点还有一个字段“number of neighbories”,我想遍历所有的边,并在出现source或destinatio时增加邻居的数量

for (int edge=0; edge<graph.getEdges().size(); edge++){
    graph.getEdges().get(edge).getSource().neighborUp();
    graph.getEdges().get(edge).getDestination().neighborUp();
}

for(int-edge=0;edge我假设您使用Java。
问题在于图形的创建,每次创建边时,都会为节点创建新对象:

Node node1=new Node(Integer.parseInt(temprelation[0]));
Node node2=new Node(Integer.parseInt(temprelation[1]));
集合中每个整数只包含一个副本,但边包含不同的实例

要解决此问题,您可以创建所有已解析节点的映射,并且在每次迭代时,检查是否已从Integer创建对象,而不是从Integer创建对象:

//one global object
Map<Integer,Node> map = new HashMap<Integer,Node> ();

...

Integer val = Integer.parseInt(temprelation[0]);
if (map.get(val)==null) {
   map.put(val, new Node(val));
}
Node node1 = map.get(val);

val = Integer.parseInt(temprelation[1]);
if (map.get(val)==null) {
   map.put(val, new Node(val));
}
Node node2 = map.get(val);
//一个全局对象
Map Map=newhashmap();
...
Integer val=Integer.parseInt(temprelation[0]);
if(map.get(val)==null){
map.put(val,新节点(val));
}
节点node1=map.get(val);
val=Integer.parseInt(临时关系[1]);
if(map.get(val)==null){
map.put(val,新节点(val));
}
节点node2=map.get(val);

检查所讨论的对象是否实际上是相同的引用-不要使用
.equals
,而是
=
。如果这没有帮助,发布更多的代码可能就行了。
//one global object
Map<Integer,Node> map = new HashMap<Integer,Node> ();

...

Integer val = Integer.parseInt(temprelation[0]);
if (map.get(val)==null) {
   map.put(val, new Node(val));
}
Node node1 = map.get(val);

val = Integer.parseInt(temprelation[1]);
if (map.get(val)==null) {
   map.put(val, new Node(val));
}
Node node2 = map.get(val);