2013-10-16 48 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))