2013-10-16 47 views
2

我正在嘗試爲自定義對象的散列表編寫get方法。HashMap家庭作業,模板問題

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()和密鑰打印相同的值和相同類型的類,然後if語句應該出來真,打印應返回的值。但是,這是我得到的結果:

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

if語句內部的行未顯示。我忽略了什麼愚蠢的問題?我認爲它可能與模板有關,因爲key是泛型類型K?

+2

正確的術語是Java中的泛型。 –

+1

另外,這是一個應用於引用類型的'=='運算符的問題。 –

+0

它不一定只適用於'Integer',但你會明白。 –

回答

0

嘗試

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

你可以使用==只爲基本數據類型,你可以使用對象的equals方法將屬性值進行比較,如

d.getKey().equals(key) 
+0

如果密鑰不是整數? –

+0

AS根據OP的問題,關鍵是類型java.lang.Integer – upog

+0

「你可以使用==僅用於原始數據類型」:這是非常不真實的...但你必須知道你在做什麼。有時你實際上想要測試身份,有時你確實想測試平等。 – scottb

2

if (d.getKey() == key)是不正確的。您需要使用if (d.getKey().equals(key))