0

ノードを含む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;
}
4

1 に答える 1

0

オーバーライドhashCode()するときにメソッドをオーバーライドequals()する必要があるため、等しいオブジェクトは同じハッシュ コードを持つ必要があります。http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html#equals(java.lang.Object )を参照してください。

于 2012-04-08T15:46:37.337 に答える