建站教程,网页网站开发项目设计,黄骅港引航站,访问失效链接 如何删除 网站维护HashMap的数据结构在jdk1.8之前是数组链表#xff0c;为了解决数据量过大、链表过长是查询效率会降低的问题变成了数组链表红黑树的结构#xff0c;利用的是红黑树自平衡的特点。
链表的平均查找时间复杂度是O(n)#xff0c;红黑树是O(log(n))。
HashMap中的put方法执行过…
HashMap的数据结构在jdk1.8之前是数组链表为了解决数据量过大、链表过长是查询效率会降低的问题变成了数组链表红黑树的结构利用的是红黑树自平衡的特点。
链表的平均查找时间复杂度是O(n)红黑树是O(log(n))。
HashMap中的put方法执行过程大体如下
1、判断键值对数组table[i]是否为空null或者length0是的话就执行resize()方法进行扩容。
2、不是就根据键值key计算hash值得到插入的数组索引i。
3、判断table[i]null如果是true直接新建节点进行添加如果是false判断table[i]的首个元素是否和key一样一样就直接覆盖。
4、判断table[i]是否为treenode即判断是否是红黑树如果是红黑树直接在树中插入键值对。
5、如果不是treenode开始遍历链表判断链表长度是否大于8如果大于8就转成红黑树在树中执行插入操作如果不是大于8就在链表中执行插入在遍历过程中判断key是否存在存在就直接覆盖对应的value值。
6、插入成功后就需要判断实际存在的键值对数量size是否超过了最大容量threshold如果超过了执行resize方法进行扩容。