用于查找2棵树的交叉点的数据结构

时间:2012-04-08 15:40:34

标签: java search data-structures hashmap equals

我有两棵树,其中包含节点,在我创建它们之后,我将第一棵树的所有节点都放到一个链表中,然后将第二棵树放到一个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;
}

1 个答案:

答案 0 :(得分:0)

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