Map中如何实现key唯一不重复

Map中如何实现key唯一不重复

问题:如何做到Map中key唯一不重复,每次都遍历来equals比较吗?

首先,答案是否。如果全部遍历的话,当Map中元素很多的时候,显然查询效率低。


解释:
HashMap属于散列存储结构,其table的存储是放在不同的Jvm内存区域。通过一个整型值来标识table的区域,相当于这个区域的下标。然后整个查找过程就从不再需要遍历整个table,只需遍历这一区域的数据即可。

结合HashMap.class中的put方法来说明:



如何找到这个区域呢?
1.首先将传入的key值用hash方法转化为int型的hash值,并且通过该方法让hash值变得各位更均匀一些。变得更均匀的目的是让每一个区域的大小更加等分些,公平利用存储空间,查询速度得到提升。
2.而后的indexfor方法将根据其hash值和table的大小得到这个区域的“位置下标”。具体其方法的实现同样也是为了让各个区域分布的更加均匀。(具体为什么这样的方法是最好的参考 http://blog.csdn.net/jiary5201314/article/details/51439982 中阐述为什么不是取模而是  return h & (length-1); )


得到这个区域以后,再遍历这个区域来找到对应的元素
1.通过for循环遍历这个区域的链表,在循环中如果key值的hash值相等,并且其key值相等,那么进行覆盖原元素操作。
2.如果遍历结束依然没找到,则新添元素


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值