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 语句应该为真,并打印应该返回的值。但是,这是我得到的结果:

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

if 语句内的行不显示。我忽略了什么愚蠢的问题?我认为这可能与模板有关,因为 key 是泛型类型 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 回答