呼伦贝尔市规划建设局网站,山东大良网站建设,高端品牌网站建设公司哪家好,黑科技引流推广神器下载HashMap就是以Key-Value的方式进行数据存储的一种数据结构。 HashMap在jdk1.7之前和jdk1.8之后的底层数据结构是不一样的。 在jdk1.7之前是数组链表的形式#xff0c;并通过entry节点保存key和value值#xff1b;当Hash冲突比较严重的时候#xff0c;在数组上形成的链表就会… HashMap就是以Key-Value的方式进行数据存储的一种数据结构。 HashMap在jdk1.7之前和jdk1.8之后的底层数据结构是不一样的。 在jdk1.7之前是数组链表的形式并通过entry节点保存key和value值当Hash冲突比较严重的时候在数组上形成的链表就会变的越来越长由于链表是不支持索引查询的所以这个时候要想在链表中找一个元素的话就需要遍历一遍链表最坏的结果是查找的元素在链表的末尾这样显然会导致查询效率大大降低 所以为避免这一问题的发生在jdk1.8加入了红黑树红黑树是一个自平衡的二叉查找树使用红黑结点并使得两端保持相对平衡所以jdk1.8后HashMap的底层数据结构是数组链表红黑树的形式。 Jdk8开始当链表高度到8、数组长度超过64时会将链表转为红黑树元素以内部类使用Node类存储Key和Value。 通过计算key的hash值进行二次hash然后对数组长度进行取模获得对应数组下标 获得下标后会先判断下标位置是否存在元素如果下标位置没有元素则直接创建Node存入数组如果存在元素就会产生hash冲突 冲突产生后先对key值进行equals()比较如果key值相同则取代该元素不同则通过尾插法插入链表在插入的同时遍历链表计算高度如果中途存在key值相同的元素则进行覆盖如果没有就直接插入到链表尾部。 插入完成对链表高度进行判断如果链表高度达到8并且数组长度到64则转变为红黑树反之如果红黑树结点低于等于6则会退化为链表。 注意如果Key为null的话则存在下标0的位置上。 jdk7中HashMap底层数据结构图 jdk8中HashMap底层数据结构图 ——》以上讲述了HashMap底层数据结构是怎样的同时这个题也是面试的高频提问题。在回答过程中还穿插 了为什么在jdk8要加入红黑树这一问题。以上是自己总结的面试题根据自我理解和查找资料得出欢迎各位CSDN的友友们前来指教