HashMap什么样的情况下会产生hash冲突?
以put方法为例,首先会根据key计算出hash值,到数组中去寻址,
如果该位置上没有值得话,就直接插入数据
如果有值得话,判断key是否相等,如果相等的话,就直接覆盖数据,如果key不相等的话,这个时候就产生了hash冲突
如何解决hash冲突呢?
jdk1.7的解决办法:链表
jdk1.8的解决办法:链表 + 红黑树
会将key-value值存入到一个链表当中,如果链表比较长的话,我们去遍历这个链表,此时时间复杂度是O(n),时间比较长,那么jdk1.8版本就用了红黑树,当这个链表的长度大于等于8的话,那么他就会转为红黑树,这个时候时间复杂度是O(logn)