如何高效的使用HashMap

HashMap是知道怎么实现的了,哈哈,那么我们应该怎么使用HashMap才能达到最高的效率
HashMap通过hashcode对其内容进行快速查找,而TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使
用TreeMap(HashMap中元素的排列顺序是不固定的)。

使用HashMap,重写HashCode()的原则:
1.不必对每个不同的对象都产生一个唯一的hashcode,只要你的HashCode方法使get()能够得到put()放进去的内容就可以了。即"不为一原则"。
2.生成hashcode的算法尽量使hashcode的值分散一些,不要很多hashcode都集中在一个范围内,这样有利于提高HashMap的性能。即"分散原则"。
这两条的意思是hashCode可以返回一样,但是尽量不同。
当以对象作为key传递时,HashMap会取对象的hashCode()方法来进行位运算得到在HashMap中数组的下标(见HashMap源码解析).
如果不同的对象都产生一个唯一的hashCode(),那么其离散度会大一点,也就是取的时候可能直接根据下标得到对象。
第一条原则还有一点,你的HasCode方法使get()能够得到put(0放进去的内容,也就是说你的hashCode可以相同,那么你根据对象key得到的
就是木桶链(见HashMap源码解析),循环木桶链必须能够找到所对应的内容,这也是为什么我们要重写hashCode()和equals()方法的原因了

以下是我整理出来的原则,我们不仿把对象比喻成数据库的表,HashCode()比喻成其唯一键(可以是组合唯一键),equals()方法来得到唯一键计算的结束。[唯一键不同就为不同的对象],当然还有一种情况,我这张表(对象)没有唯一键怎么办,那么HashCode()方法根据离散原则尽量返回不同的值[int],在equals()方法必须判断其唯一性或者至少符合你的业务逻辑的需要.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值