私は次のオブジェクトを持っていますNode
:
private class Node implements Comparable<Node>(){
private String guid();
...
public boolean equals(Node o){
return (this == o);
}
public int hashCode(){
return guid.hashCode();
}
public int compareTo(Node o){
return (this.hashCode() - o.hashCode());
}
...
}
そして、私はそれを次のように使用しますTreeMap
:
TreeMap<Node, TreeSet<Edge>> nodes = new TreeMap<Node, TreeSet<Edge>>();
現在、ツリー マップは、Graph
現在グラフ内にあるノードとそのエッジのセットを ( クラス からEdge
) 格納するために呼び出されるクラスで使用されます。私の問題は、実行しようとするときです:
public containsNode(n){
for (Node x : nodes.keySet()) {
System.out.println("HASH CODE: ");
System.out.print(x.hashCode() == n.hashCode());
System.out.println("EQUALS: ");
System.out.print(x.equals(n));
System.out.println("CONTAINS: ");
System.out.print(nodes.containsKey(n));
System.out.println("N: " + n);
System.out.println("X: " + x);
System.out.println("COMPARES: ");
System.out.println(n.compareTo(x));
}
}
私は時々次のようになります:
HASHCODE: true EQUALS: true CONTAINS: false N: foo X: foo COMPARES: 0
誰が私が間違っているのかについて考えを持っていますか? 私はまだこれらすべてに慣れてhashCode()
いないので、簡単なことを見落としている場合は事前にお詫びします ( TreeMap
.
edit1:compareTo()
メソッド情報を追加しました。