Resultados consistentes de Equals (), pero resultados inconsistentes de TreeMap.containsKey ()

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

         ...

    }

Y lo uso en lo siguienteTreeMap:

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

Ahora, el mapa de árbol se usa en una clase llamadaGraph para almacenar nodos actualmente en el gráfico, junto con un conjunto de sus bordes (de la claseEdge) Mi problema es cuando intento ejecutar:

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

A veces me sale lo siguiente:

HASHCODE: verdadero IGUAL: verdadero CONTIENE:falso N: foo X: foo COMPARA: 0

¿Alguien tiene una idea de lo que estoy haciendo mal? Todavía soy nuevo en todo esto, así que me disculpo de antemano si estoy pasando por alto algo simple (lo séhashCode() realmente no importa paraTreeMap, pero pensé que lo incluiría).

edit1: agregadocompareTo() información del método

Respuestas a la pregunta(3)

Su respuesta a la pregunta