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显得多余,还没看明白这句有什么用。