Resultados consistentes de Equals (), mas resultado inconsistente de TreeMap.containsKey ()

Eu tenho o seguinte objetoNode:

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

         ...

    }

E eu uso no seguinteTreeMap:

TreeMap<Node, TreeSet<Edge>> nodes = new TreeMap<Node, TreeSet<Edge>>();

Agora, o mapa da árvore é usado em uma classe chamadaGraph para armazenar nós atualmente no gráfico, juntamente com um conjunto de suas arestas (da classeEdge) Meu problema é quando tento executar:

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

Às vezes, recebo o seguinte:

HASHCODE: true Igual a: true CONTÉM:falso N: foo X: foo COMPARA: 0

Alguém tem uma idéia do que estou fazendo de errado? Ainda sou novo em tudo isso, então peço desculpas antecipadamente se estou ignorando algo simples (eu seihashCode() realmente não importa paraTreeMap, mas achei que incluiria).

edit1: adicionadocompareTo() informações do método.

questionAnswers(3)

yourAnswerToTheQuestion