1.哈希表底层采用的是何种算法计算hash值?还有哪些算法可以计算hash值?
1.底层采用的key 的hashcode方法的值结合数组长度无符号右移(>>>),按位异或(^),按位与(&)计算出索引。
2.还可以采用 平方取中法、取余数、伪随机数法。
2.HashMap 数据结构
数组+链表+红黑树
红黑树维护和平衡会花费比较多的时间,经过测试,当链表长度大于8且数组长度大于64,才转化为红黑树结构。
3.put 步骤
1.map.put("暴躁",'12');
2.获取"暴躁"字符串的hash值
3.经过hash干扰函数,使此hash值更具散列
4.构造出Node对象
5.路由算法,找出node应存放在数组的位置【(tab.length - 1) & node.hash】