0

我有两棵树,其中包含节点,在我创建它们之后,我将第一棵树的所有节点放入链表,将第二棵树的所有节点放入 hashmap,作为映射的键。我想从树中找到两个节点,它们具有相同的变量,称为:状态(长类型)。所以在创建之后我调用:

List<Node> list;
HashMap<Node, Node> hashtable;

...create nodes, take them to the collections

for(Node n : list){
    if(hashtable.containsKey(n)){
        //doSomething          
    }
}

我正在使用 hashmap,因为它非常快,很艰难,我有 4000000(400 万)个节点。我已经覆盖了 Node 类的 equals 方法,但似乎 containskey 方法检查了哈希码,但据我了解,它只需要检查指向 java 参考的 equals 方法链接。所以问题是我应该使用什么数据结构来检查这个东西,或者我应该如何重写代码?

这是我的equals方法:

    @Override
    public boolean equals(Object obj) {
    if(obj instanceof Node){
        Node node = (Node)obj;
        return (states == node.getStates());
    }
    return false;
}
4

1 回答 1

0

覆盖时必须覆盖hashCode()方法,equals()以便相等的对象必须具有相同的哈希码。请参阅http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html#equals(java.lang.Object )。

于 2012-04-08T15:46:37.337 回答