Java jGraphT定向加权乘法器中的等顶点
我想要一个带有“自定义”顶点和边的DirectedWeightedMultigraph。 对于这段代码,我希望只有三个顶点,因为v1和v4具有相同的关键点,但我有四个Java jGraphT定向加权乘法器中的等顶点,java,equals,directed-graph,jgrapht,Java,Equals,Directed Graph,Jgrapht,我想要一个带有“自定义”顶点和边的DirectedWeightedMultigraph。 对于这段代码,我希望只有三个顶点,因为v1和v4具有相同的关键点,但我有四个 DirectedWeightedMultigraph<Vertex, Edge> graph = new DirectedWeightedMultigraph<Vertex, Edge>(Edge.class); Vertex v1 = new Vertex("a", "o1"
DirectedWeightedMultigraph<Vertex, Edge> graph = new DirectedWeightedMultigraph<Vertex, Edge>(Edge.class);
Vertex v1 = new Vertex("a", "o1");
Vertex v2 = new Vertex("b", "o2");
Vertex v3 = new Vertex("c", "o1");
Vertex v4 = new Vertex("a", "o3");
graph.addVertex(v1);
graph.addVertex(v2);
graph.addVertex(v3);
graph.addVertex(v4);
System.out.println("#vertex: "+ graph.vertexSet().size());
}
在使用边之前,我阅读了关于顶点和边的equals和hashCode。我也试着用偏执图,但不管用。为了解决这个问题,我选择在添加顶点之前“手动”检查具有特定关键点的顶点是否在顶点集中。但我忽略了代码中的错误。我仍然有四个顶点:
List<Vertex> rowVertices = new ArrayList<Vertex>();
rowVertices.add(v1);
rowVertices.add(v2);
rowVertices.add(v3);
rowVertices.add(v4);
Iterator it = rowVertices.iterator();
while (it.hasNext()) {
Vertex currentVertex = (Vertex) it.next();
if (!currentVertex.isAVertex(graph.vertexSet())) {
graph.addVertex(currentVertex);
}
}
System.out.println("#vertex: "+ graph.vertexSet().size());
列出行顶点=新建ArrayList();
添加(v1);
添加(v2);
添加(v3);
添加(v4);
Iterator it=rowVertices.Iterator();
while(it.hasNext()){
顶点currentVertex=(顶点)it.next();
如果(!currentVertex.isAVertex(graph.vertexSet())){
图.addVertex(currentVertex);
}
}
System.out.println(“#vertex:+graph.vertexSet().size());
现在正在工作。。。但是isAVertex()
方法中if(this.equals(v))
的奇怪行为。事实上,我将这个条件语句分为两个类(实现方式完全相同),但它在一个类中工作,在另一个类中,我需要使用if(this.key.equals(v.key))
。怎么了???
public class Edge {
int cost;
List<Vertex> rowVertices = new ArrayList<Vertex>();
rowVertices.add(v1);
rowVertices.add(v2);
rowVertices.add(v3);
rowVertices.add(v4);
Iterator it = rowVertices.iterator();
while (it.hasNext()) {
Vertex currentVertex = (Vertex) it.next();
if (!currentVertex.isAVertex(graph.vertexSet())) {
graph.addVertex(currentVertex);
}
}
System.out.println("#vertex: "+ graph.vertexSet().size());