首先我们知道hashmap的key是可以直接使用String来充当的,而如果我们想用对象来作为key,那么我们必须重写这个对象的hashCode方法以及equals方法。
看看下面的地址:
public class HashMapTest {
private static class Key{
int key_hash;
int key_value;
public Key(int hash,int value){
this.key_hash=hash;
this.key_value=value;
}
@Override
public boolean equals(Object o) {
Key k=(Key)o;
return this.key_value==k.key_value;
}
}
public static void main(String[] args){
HashMap<Key,String> map= new HashMap<Key,String>();
Key key=new Key(1,1);
map.put(key,"hello");
System.out.print(map.get(new Key(1,1)));
}
}
它的运行结果是null,也就是没有这个值。
因此我们来看看hashmap中,是怎么通过hash计算来把元素定位的。
final int hash(Object k) {
int h = hashSeed;
if (0 != h && k instanceof String) {
return sun.misc.Hashing.stringHash32(