我正在尝试为自定义对象的hashmap编写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语句中的行未显示。我忽视了什么愚蠢的问题?我认为它可能与模板有关,因为key是泛型K?
答案 0 :(得分:2)
if (d.getKey() == key)
不正确。你需要使用if (d.getKey().equals(key))
答案 1 :(得分:0)
试
d.getKey().intValue() == key.intValue()
你可以使用==仅用于原始数据类型,对于对象你可以使用equals方法将属性值比较为
d.getKey().equals(key)