1.获得key对象的hashcode
2.根据hashcode计算出hash值(要求在[0,数组长度-1]区间)
1.一种极端简单和低下的算法是:
hash值-hashcode/hashcode;
也就是说,hash值总是1,意味着,键值对对象都会存储到数组索引1位置,这样就形成了一个非常长的链表,相当于没存储一个对象都会发生“hash冲突”,hashmap也退化成了一个“链表”。
2.一种简单和常用的算法是(相除取余算法)
hash值=hashcode%数组长度
这种算法可以让hash值均匀分布在[0,数组长度-1]的区间,但是,这种算法由于使用了“除法”,效率低下,jdk后来改进了算法,首先约定数组长度必须为2的整数幂,这样采用位运算即可实现取余的效果:hash值=hashcode&(数组长度-1)。
本文共 315 个字数,平均阅读时长 ≈ 1分钟
评论