Java 用于查找2树的交集的数据结构是什么
我有两棵树,其中包含节点,在我创建它们之后,我将第一棵树的所有节点都带到linkedlist,将第二棵树的所有节点带到hashmap,作为映射的键。我想从树中找到两个节点,它们有相同的变量:states(longtype)。因此,在创建之后,我调用: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
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;
}