源码剖析HashMap--当key为Object时为什么要重写hashcode与equals方法

博客探讨了在使用HashMap时,当key为自定义Object对象时,为何需要重写hashCode和equals方法。通过分析HashMap的get和put方法,解释了如果不重写这两个方法,将导致对象定位和比较错误,从而影响查找和存储的正确性。文章以实例说明,重写方法对于确保Map操作正确性的重要性。
摘要由CSDN通过智能技术生成

首先我们知道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(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值