hashMap
hashMap的散列方式
- hashCode取模
- 位干扰:hashCode无符号右移16位(hashMap的初始容量只有16)与 hashCode
- 实际索引:n-1(15) & hashCod
public class test01 {
public static void main(String[] args) {
HashMap<String,String> map = new HashMap<>();
map.put("123","123");
int index = (Math.abs("123".hashCode())%16);
System.out.println("index:"+index);
System.out.println("hashCode:"+"123".hashCode());
System.out.println("位干扰hash:"+hash("123"));
System.out.println("位干扰index:"+(hash(hash("123")&15)));
}
private static int hash(Object key){
int h;
return (key == null) ? 0 :(h = key.hashCode()) ^ (h >>> 16);
}
}
数据结构
采取 数组+链表 的方式
当某个链表的个数达到8个节点会转换成 红黑树
结构存储
红黑树
常见的数据结构 时间复度O(lgn)
红黑树本质上是一颗二叉搜索树,它满足二叉搜索树的基本性质——即树中的任何节点的值大于它的左子节点,且小于它的右子节点。
规则
- 根节点必须是黑色
- 不包含连续的红色节点
- 从任意点到叶子节点的路径黑色节点数相同
数据结构
节点的颜色、左子节点指针、右子节点指针、父节点指针、节点的值