HashMap底层原理
1、HashMap底层原理在 JDK 1.7 中 HashMap 是以「数组加链表」的形式组成的JDK 1.8 之后新增了「红黑树」的组成结构「当链表长度大于 8 并且 hash 桶的容量大于 64 时链表结构会转换成红黑树结构」。所以它的组成结构如下图所示HashMap 中数组的每一个元素又称为哈希桶也就是 key-value 这样的实例。在 Java7 中叫 EntryJava8 中叫 Node。因为它本身所有的位置都为 null在 put 插入的时候会根据 key 的 hash 去计算一个 index 值。比如我 put (徐庶, 666)在 HashMap 中插入 徐庶 这个元素通过 hash 算法算出 index 位置是 3。这时的结构如下所示还是个数组。以上没 hash 冲突时若发生 hash 冲突就得引入链表啦。假设我再次 put (元直, 666)在 HashMap 中插入 元直 这个元素通过 hash 算法算出 index 位置也是 3。这时的结构如下所示形成了链表。2、HashMap的重要方法查询-get方法static final int hash(Object key) { int h; return (key null) ? 0 : (h key.hashCode()) ^ (h 16); }key的hashCode右移16再与key的hashCode值进行异或运算可以使得key的高16位与低16位都参与了运算减少了hahs冲突的可能。first tab[(n - 1) hash]用高效的位运算代替取模计算数组下标。新增-put方法扩容-resieze方法3、HashMap有哪些属性4、为什么HashMap的初始化长度是16必须是2的幂次方5、为什么重写equals方法时需要重写hashCode方法呢6、HashMap死循环分析