У меня есть следующий объект 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 РАВНО: true СОДЕРЖИТ: false N: foo X: foo СРАВНЯЕТ: 0
Кто-нибудь знает, что я делаю неправильно? Я все еще новичок во всем этом, поэтому заранее извиняюсь, если упускаю из виду что-то простое (я знаю, что hashCode()
не имеет большого значения для TreeMap
, но я решил включить это).
edit1: добавлена информация о методе compareTo()
.
equals
также может быть проигнорированоTreeMap
иTreeSet
. Не могли бы вы предоставитьcompareTo
реализациюNode
? Это то, что имеет значение сTree{Map|Set}
- person Dirk   schedule 23.04.2010