我有以下对象Node:
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
TreeMap<Node, TreeSet<Edge>> nodes = new TreeMap<Node, TreeSet<Edge>>();
现在,树形图用于一个称为的类中,Graph用于存储图形中当前存在的节点以及它们的边集(来自class 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)); } }
我有时会得到以下信息:
哈希码:true等于:true包含: false N:foo X:foo比较数:0
有人知道我在做什么错吗?我对这一切仍然是陌生的,所以如果我忽略了一些简单的hashCode()事情TreeMap,我会事先道歉(我知道这并不重要,但我想我会包括在内)。
hashCode()
edit1:添加了compareTo()方法信息。
compareTo()
这里有些错误。
Object.equals
@Override public boolean equals(Object obj)
compareTo
对于整数溢出问题,请参阅问题为什么我的简单比较器损坏了?