2016-12-16 18 views
0

現在プロジェクトで作業中ですが、この時点で固まっています。基本的には、タイプを比較する方法を理解しようとしています。タイプとキー:Int。コードから、here.theKeyとtheKey2は型Keyであり、theKey1はkeyを引数として受け取り、hashcodeを取得し、BST内で 'here'という名前の同じハッシュコードを見つけるために使用されます。私が抱えている問題は、this.theKeyの値をintであるtheKey1とどのように比較するのか分かりません。ここでint型の値をJavaの別の型と比較する

がメソッドです:

public Value get(Key key) 
    { 
     int theKey1 = hash(key); 
     TreeNode here = Tree; 
     while (here != null) 
     { 
      int theKey2=here.theKey; 


      if(theKey1 < theKey2) 
      { 
      here = here.left; 
      } 
      else if(theKey1>theKey2) 
       here = here.right; 
      else 
      { 
       return here.value; 
      } 
     } 
     throw new IllegalArgumentException("Value associated with the key not found"); 
    } 

私がのcompareToを使用しようとしたが、theKey1がint型であるため、私はエラーを取得しました。どんな助けや指導も大歓迎です。

+1

この行に 'key2 = here.theKey;' int isKey2 = hash(here.theKey); 'を付けてはいけません。 – Mritunjay

+2

'int theKey2 = hash(here.theKey);'、しかし、ハッシュコードで注文されるBSTのポイントはどういう意味ですか? – EJP

+0

このプロジェクトでは、衝突を処理するために連鎖したHashtableと配列の代わりにBSTを使用するプログラムを作成します。 –

答えて

0

ここでキーをハッシュするのは無意味です。ハッシュテーブルのBSTは、すべてが同じハッシュコードを持つ要素で構成されています。 Key implements Comparable<Key>を保証し、Key.compareTo()を使用する必要があります。

-1

あなたはすでにあなたの手で答えを持っています。コードでは、タイプKeyの参照のみがhashになります。では、Keyのすべてをハッシュに変換し、必要に応じてそれらのハッシュを比較してみませんか? Iコードにすぎ別の問題を参照int theKey2=hash(here.theKey);

にwhileループで最初の式を変換

同様

。ループ内のifまたはelse ifの条件が真と評価された場合、対応するブロックを実行した後、コントロールはthrowステートメントに直接送られます。したがって、メソッドはルートの子ノードに分岐しません。だからifelse ifブロックの最後の行にcontinue文を入れてください。

+0

これらの特定のキーをハッシュすると常に同じハッシュコードが返され、BST全体が無意味になります。 – EJP