1、HashMap每一个键值对也叫做Entry。 2、HashMap数组的每一个元素不止是一个Entry对象,也是一个链表的头节点。每一个Entry对象通过Next指针指向它的下一个Entry节点。 3、新来的Entry节点插入链表时,使用的是“头插法”,因为HashMap的发明者认为,后插入的Entry被查找的可能性更大。 4、HashMap的初始长度默认是16,每次自动扩展或手动初始化时,长度必须是2的幂。 5、默认之所以选择16,是为了服务于从key映射到index的hash算法。 6、如何实现一个尽量均匀分布的Hash函数呢?我们通过利用Key的HashCode值来做某种运算。这个运算可以是对长度取模。但取模的效率较低,所以用很高效的位运算。
index = HashCode(Key) & (Length - 1)
7、如果HashMap长度是16,Length-1的结果为15,二进制的1111。Hash算法的index结果,完全取决于Key的Hashcode值的最后几位。只要输入的HashCode本身分布均匀,Hash的结果就是均匀的。 8、如果HashMap长度为10,有些index出现几率会更大,而有些index永远不会出现(比如0111),不够均匀。