Равные вершины в jGraphT DirectedWeightedMultigraph

Я хочу иметь DirectedWeightedMultigraph с «настроенными» вершинами и краями. С этим кодом я хотел бы иметь только три вершины, потому что у v1 и v4 один и тот же ключ, а у меня четыре.

         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());

Вот как выглядит моя вершина:

public class Vertex {

String key;
String other;

public Vertex(String id, String o){
    key = id;
    other = o;
}

public boolean equals(Object object) {
    if (object == null || !(object instanceof Vertex)) {
        return false;
    }       
    return (this.key == ((Vertex) object).key);
}   

public boolean isAVertex(Set<Vertex> set) {

    boolean result = false;
     for (Vertex v : set) {
            if (this.equals(v)) { 
                result = true;
                break;
            }
     }
    return result;

}

}

Мои края выглядят так

public class Edge {

int cost;   

}

Перед использованием ребер я прочитал это и это о равенстве и хэш-коде для вершины и ребра. Я также пытаюсь использовать ParanoidGraph, но это не работает. Чтобы решить эту проблему, я решил «вручную» проверить, находится ли вершина с определенным ключом в наборе вершин, прежде чем добавлять вершину. Но я скучаю по тому, что не так в моем коде. У меня все еще есть четыре вершины:

         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());

person bkm    schedule 16.05.2014    source источник
comment
Теперь работает... но странное поведение if (this.equals(v)) в методе isAVertex(). На самом деле у меня есть этот условный оператор в двух классах (реализованных точно так же), но он работает в одном классе, а в другом мне нужно использовать if (this.key.equals(v.key)). Что не так ???   -  person bkm    schedule 17.05.2014