标签:使用 如何 map 常见 复杂 面试 针对 没有 下标
底层使用哈希表(数组加链表)来存储,链表过长会将链表转成红黑树,以实现在O(logn)时间复杂度内查找
对key求哈希值然后计算下标
如果没有哈希碰撞则直接放入槽中
如果碰撞了以链表的形式链接到后面
如果链表长度超过阈值(默认阈值是8),就把链表转成红黑树
如果节点已存在就替换旧值
如果槽满了(容量*加载因子),就需要resize
高16bit不变,低16bit和高16bit做异或
(n-1)&hash获得下标
还有哪些哈希实现方式?(查资料和博客)
将节点加到链表后
容量扩充为原来的两倍,然后对每个节点重新计算哈希值
这个值只可能在两个地方:一种是在原下标位置,另一种是在下标为<原下标+原容量>的位置
开放地址法,链地址法
将链表转为红黑树,JDK1.8已经实现
标签:使用 如何 map 常见 复杂 面试 针对 没有 下标
原文地址:https://www.cnblogs.com/dudu19939/p/9500970.html