2

カスタム オブジェクトのハッシュマップの get メソッドを作成しようとしています。

public V get(K key){
    int hashval = (int)(Math.abs(key.hashCode()) % this.capacity);
    for(Data<K, V> d : hashmap.get(hashval) ){
        System.out.println("hashval: " + hashval);
        System.out.println("d.getKey:" + d.getKey() + " class: " + d.getKey().getClass());
        System.out.println("key:" + key + " class: " + key.getClass());

        if (d.getKey() == key){
            System.out.println("d.getValue: " + d.getValue());
            return d.getValue();
        }
    }

d.getKey() と key が同じ値と同じクラス タイプを出力する場合、if ステートメントは true になり、返される値を出力するはずです。しかし、これは私が得る結果です:

hashval: 5  
d.getKey:12345 class: class java.lang.Integer  
key:12345 class: class java.lang.Integer  

if ステートメント内の行は表示されません。私が見落としているばかげた問題は何ですか?キーはジェネリック型 K であるため、テンプレートと関係があるのではないかと思います。

4

2 に答える 2

2

if (d.getKey() == key)は正しくありません。使用する必要があります if (d.getKey().equals(key))

于 2013-10-16T03:34:31.773 に答える
0

試す

d.getKey().intValue() == key.intValue()

== はプリミティブ データ型にのみ使用できます。オブジェクトの場合、equals メソッドを使用して属性値を次のように比較できます。

   d.getKey().equals(key)
于 2013-10-16T03:34:04.353 に答える