你知道HashMap在高并发下可能会出现哪些问题吗( 二 )
对照源码分析一下具体的put操作是如何完成的:
涉及到的几个方法:
static int hash(int h) { h ^= (h >>> 20) ^ (h >>> 12); return h ^ (h >>> 7) ^ (h >>> 4);}static int indexFor(int h, int length) { return h & (length-1);}
数据put完成以后,就是如何get,我们看一下get函数中的操作:
看一下链表的结点数据结构,保存了四个字段,包括key,value,key对应的hash值以及链表的下一个节点:
static class Entry implements Map.Entry { final K key;//Key-value结构的key V value;//存储值 Entry next;//指向下一个链表节点 final int hash;//哈希值 }
2.Rehash/再散列扩展内部数组长度
推荐阅读
- |传世群英版你那些你不知道的魅力
- 微软|微软Xbox 20周岁了,但这些密辛你未必知道
- 剑三|同为老五门,却势如水火!剑三奶花与天策的恩怨只有老玩家才知道
- 提莫|不看不知道,一看居然有点搞笑,原来女警的二技能名字是用来抓提莫的!!!!
- 热血传奇|热血传奇:神豪般的财力到底是何方神圣,你知道吗?
- 游戏推荐|11月游戏推荐,每年的游戏黄金月份,你还在不知道玩什么吗?
- 暗黑破坏神|暗黑2重制版你知道角色最高能获得多少技能点么?
- edg战队|“Viper不会离开EDG”,经纪人怒斥:我都不知道,你们就知道了?Nuguri不会加入DK
- 电子竞技|武将外号,你都知道几个?老玩家:这不是我先开始这么叫的吗!
- s11全球总决赛|炉石传说平衡补丁公布,2400点奥术之尘,不知道你能拿到多少?