1. 它是HastSet的内部容器。
2. 它的数据结构是链表散列。
3. Entry需要实现hashcode方法,默认为key和value的异或。
4. HashMap保证均匀分布的方法:在存放Entry时,使用E.hash&(table.length-1),通过截取得到一个符合范围的index位置。然而要保证0~(length-1)都能取到才能使分布均匀。所以要保证length-1的二进制表示全为1,于是length必须为二的n次方。这在初始化和resize的时候进行维护就能做到。但是仍存在一个问题是由于e.hashcode()是低位被截取,所有高位的变化都被忽略了,这就意味着低位相同的Entry都会被放在一起,仍然不能保证分布均匀。于是HashMap首先在e.hashcode()基础上再次做hash,具体大致是把高位移位到低位与原值做异或,总共做了6次异或,使新值作为E.hash。这样做尽量使hashcode的每一位变化都能在截断之后仍能体现。在得到了index之后,如果发生了碰撞,放在该位置的链表的第一位。
5.resize时的transfer方法,对每一个值重新hash放置,性能消耗在此。