hashmap存储数据

在HashMap中,为什么不能使用基本数据类型作为key?

其实和HashMap底层的存储原理有关,HashMap存储数据的特点是:无序、无索引、不能存储重复元素。

存储元素采用的是hash表存储数据,每存储一个对象的时候,都会调用其hashCode()方法,算出其hash值,如果相同,则认为是相同的数据,直接不存储,如果hash值不同,则再调用其equals方法进行比较,如果返回true,则认为是相同的对象,不存储,如果返回false,则认为是不同的对象,可以存储到HashMap集合中。

 之所以key不能为基本数据类型,则是因为基本数据类型不能调用其hashcode()方法和equals()方法,进行比较,所以HashMap集合的key只能为引用数据类型,不能为基本数据类型,可以使用基本数据类型的包装类,例如Integer Double等。

当然,在HashMap存储自定义对象的时候,需要自己再自定义的对象中重写其hashCode()方法和equals方法,才能保证其存储不重复的元素,否则将存储多个重复的对象,因为每new一次,其就创建一个对象,内存地址是不同的。

   注:默认的对象的hashcodo值就是内存地址,equals方法比较的也是 ==, 比较的是内存地址
重写后的hashcode方法就是对象的属性的地址,equals方法是比较对象的属性的地址

   另:HashMap中key是可以为null, 只能存储一个null, 因为计算key的hash值的时候,如果key为null, 则其hash值为0
原文:https://blog.youkuaiyun.com/weixin_42054155/article/details/80715750

转载于:https://www.cnblogs.com/duende99/p/11153812.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值