ノードを含む2つのツリーがあり、それらを作成した後、マップのキーとして、最初のツリーのすべてのノードをリンクリストに、2番目のツリーをハッシュマップに移動します。ツリーから2つのノードを見つけたいと思います。これには、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
}
}
私はハッシュマップを使用しています。これは非常に高速で、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;
}