我有两棵树,其中包含节点,在我创建它们之后,我将第一棵树的所有节点都放到一个链表中,然后将第二棵树放到一个hashmap中,作为地图的键。我想从树中找到两个节点,它们具有相同的变量:states(long type)。所以在创作之后我打电话:
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方法检查了hashcode,但据我所知,它只需要检查equals方法link to java reference。所以问题是我应该使用什么数据结构,检查这个东西,或者我应该如何重写代码?
Heres是我的平等方法:
@Override
public boolean equals(Object obj) {
if(obj instanceof Node){
Node node = (Node)obj;
return (states == node.getStates());
}
return false;
}
答案 0 :(得分:0)
在覆盖hashCode()
时必须覆盖equals()
方法,以便相等的对象必须具有相同的哈希码。请参阅http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html#equals(java.lang.Object)。