Java 用于查找2树的交集的数据结构是什么

Java 用于查找2树的交集的数据结构是什么,java,search,data-structures,hashmap,equals,Java,Search,Data Structures,Hashmap,Equals,我有两棵树,其中包含节点,在我创建它们之后,我将第一棵树的所有节点都带到linkedlist,将第二棵树的所有节点带到hashmap,作为映射的键。我想从树中找到两个节点,它们有相同的变量:states(longtype)。因此,在创建之后,我调用: List<Node> list; HashMap<Node, Node> hashtable; ...create nodes, take them to the collections for(Node n : lis

我有两棵树,其中包含节点,在我创建它们之后,我将第一棵树的所有节点都带到linkedlist,将第二棵树的所有节点带到hashmap,作为映射的键。我想从树中找到两个节点,它们有相同的变量:states(longtype)。因此,在创建之后,我调用:

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

...create nodes, take them to the collections

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

重写
equals()
时,必须重写
hashCode()
方法,以便相等的对象必须具有相同的哈希代码。请参阅。

我使用父节点和节点的状态变量来创建哈希,然后它们是唯一的,如果我只使用状态变量,那么有很多节点具有相同的状态,因此哈希映射中有大约50000个节点,而不是200万个。但是,如果节点的状态相等,我仍然希望节点是相等的。我的意思是,我只想使用哈希对映射中的节点进行排序。这并不取消与
equal()
hashCode()
一致的要求。因此,您有两棵
节点树
,希望找到交点。为此,我建议您使用优秀的apacheutils。看,你认为比较这些大数据足够快吗?至少你可以试试。我觉得很快。
    @Override
    public boolean equals(Object obj) {
    if(obj instanceof Node){
        Node node = (Node)obj;
        return (states == node.getStates());
    }
    return false;
}