Java8 HashMap 源码分析
JDK 1.6 1.7 HashMap 采用的是 数组+链表的形式, 每个桶对应不同的 hash 值,根据 key 计算得到的 hash,将键值对存放到对于的位置。
hashMap 的键值都可以为 null ,每个桶又是链表的形式是存放的。
但是当一个桶中链表的元素变多,通过 key 值依次查找的效率会变低,因此 HashMap 采用的是 桶+链表/红黑树的方式实现。 当链表长度超过 8 时,将链表转换为红黑树,大大减少查找时间。
HashMap 结构
底层实现
Hash 表的结果是数组(桶)+单链表+红黑树。
不同的 key 计算出的 hash 值可能相同,会造成 hash 冲突, hashmap 是不允许相同的 key, 当链表过长是,会造成访问速度降低,性能下降问题,黑客可以抓住这个特点进行攻击,让服务器处于繁忙状态, 引入红黑树,可以提高访问效率。