1. HashMap中hash函数如何实现的?
对key的hashCode值进行hash操作,无符号右移十六位然后做异或运算
  1. 当两个hashCode值相等时会怎样?
会发生哈希碰撞。(hashmap中key不可重复)若key值内容相同,则替换旧的value,否则链接到链表后面。 链表长度超过8,数组长度超过64时,会转换成红黑树
  1. 何时发生hash碰撞;如何解决hash碰撞?
当两个元素的kay计算的哈希值相同时,会发生hash碰撞。 jdk1.7以前,使用链表解决碰撞。 jdk1.8以后,使用红黑树解决hash碰撞。
  1. 如果两个key的hashCode值相同,如何存储键值对?
hashCode值相同的话,通过equals方法,对比内容是否相同。 若相同,新的value值覆盖旧value值,且返回旧value值 若不相同,将新的键值对,添加到链表中

Q.E.D.


如人饮水、冷暖自知