HashMap 源码阅读笔记

HashMap 类中使用节点的方式对数据进行存储,其中有一个方法比较有趣:

将存储的节点中的key值与value值进行哈希值间的异或操作,估计是为了得到具有唯一性的哈希值,防止因为存储对象中的 key 或 value 的哈希值与另一个对象重复导致冲突。

 

equals 方法中的判断逻辑分支,Map.Entry 对象的情况值得留意。第一个 if 判断(o==this)表明对象相等;而第二个 if ,则是比较的对象是 Map 当中存储的一个节点,因此需要将键和值分别判断。也就是说 HashMap 的内部类 Node 中的 equals 方法可以同时用于普通对象以及 Map 存储的节点对象间的比较。

 

对自身的键进行异或计算促使数据分布到表的高位当中,避免出现表空间无法被使用的情况。

 

HashMap 有3个构造方法,每一个构造方法中都涉及到了一个名为 DEFAULT_LOAD_FACTOR 的参数,这个参数和扩容有关系,作为衡量容量满载程度的参考,在达到最大容量之前,自动扩容(参考文章)。

还有一个重载的构造方法提供复制一个 Map 的能力。

 

EntrySet 类中的这个方法,看起来将传入的对象o赋值给一个新的对象e显得多余,还没看明白这句有什么用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值