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&nbsp;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&nbsp;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()&nbsp;realmente não importa paraTreeMap, mas achei que incluiria).

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