【小话HashMap系列】探寻哪些不为人知的隐秘角落 NO.1

我是小月,通过new来到这个世界,听说今天要去参观兵工厂-HashMap,我有点紧张,毕竟我才出生不久,什么都还不知道呢。

public class Moon{private String name; 
    private String sex;public Moon(String name,String sex){this.name = name; this.sex = sex;}
}
Moon moon = new Moon("小月","男");   

我是这样出生的,请注意,我也是有性别的。

咦,快看,应用程序的指令来了。

HashMap map = new HashMap();   
map.put("key1",moon);

通过put方法,我穿越一条长长的昏暗隧道,来到了HashMap的内部。

初始化

还没看清眼前,我就听到一阵嘈杂的广播声音:“各单位注意,各单位注意,第一个参观者进来了,马上启动初始化流程。”

我被突如其来的声音吓了一跳,等到反应过来时,才注意到眼前是一个巨大的广场,比天安门广场还要大。广场上到处都是穿着制服的工作人员,他们全都在忙忙碌碌地埋头工作,没人打算搭理我。

而在广场的中央摆着一排椅子,每把椅子的靠背上都写着什么东西。

但是隔得太远了,我又有天生的近视,看不清楚。

正当我打算走近些的时候,突然有人拍了一下我的肩膀,把一个电子屏幕塞到我的手里。

“去对应的位置坐着,别乱跑!”我回头看去,原来是一个体格强壮的保安大叔,他不耐烦挥手命令道。

“哦哦”。我赶紧答应下来,手里的电子屏幕上显示了一个数字“6”,我想,应该是椅子的编号吧?

我靠近椅子,看清上面写着Node-0、Node-1… …Node-15。

在这里插入图片描述

“快点坐好,看什么看!”保安在远处吼道,他好像对我十分不满,我怕他揍我,只好连忙在编号Node-6的椅子上坐下。

明明说是参观兵工厂,怎么像是被拖来当大兵一样?我坐立不安,心里很忐忑。还好此时有不少参观者陆续进来,不久,我旁边来了一位很和善的老爷爷。

“你好,我叫Amia。你是第一次来兵工厂吧?"他好像看出了我的局促,主动和我攀谈起来。

我点点头。

“没关系,很快你就能熟悉这里了,看见前面的大屏幕了吗?那里有整体介绍。”他指着前面的屏幕问。

“看见了,就是还看不太明白。”我早就注意到大屏幕了,但是上面的东西都看不明白,又不敢问工作人员,谁让他们那么凶悍… …

“我这里有详细的兵工厂手册说明,分你一本。”他递给我一本白色的小册子。

我翻开第一页,上面写着:

容量(capacity): 必须是2的幂, 并且 <最大容量(2的30次方)

老爷爷解释道:“我们现在坐的椅子是由数组构成的,容量就代表数组的长度,兵工厂的椅子数量是有限的,除非你找他们定制,否则初始容量就只有16。”

难怪只有16个椅子,我恍然,原来这是兵工厂的默认规则。

“不过,这么大的广场只允许16个人参观?会不会太浪费了?”我问。

“你看下一页”。老爷爷微笑摇头,提示我翻页。

我刚刚翻到下一页,突然广场上响起了刺耳的报警声,旁边的大喇叭里吼道:“各单位注意!今天参观者过多,座位不够了,立刻执行扩容流程!”

扩容

原本各司其责的工作人员都迅速行动起来,只见他们在我们前面新搭了一整排的座位,这一次足足有32个座位!

“发生什么了?” 我看了看我这排座位,还有好几个空着的呢?都没坐满。

老爷爷示意我看小册子。第二页上写着:

加载因子(Load factor):决定HashMp装满的程度,默认是0.75。

扩容阈值(threshold):当键值对的数量达到扩容阈值,则执行扩容操作。

数量(size):HashMap内键值对的数量。

扩容规则:2倍扩容。

我同样没看明白,他指着前面的显示屏解释道:“ size代表我们参观者的数量,现在已经是12了。而扩容阈值=椅子的数量(即数组长度,当前为16)*加载因子(0.75)=12。”

“哦,我明白了,兵工厂的椅子不需要坐满,只要达到扩容阈值,就会执行扩容操作。而且,每次扩容,椅子的数量都是成倍增加的。”我的疑惑解除了。

“走吧,这排椅子他们要回收,咱们该换到前面那排了。看看你的电子屏幕,上面的数字发生变化了没?”

我看了一眼,发现数字还是“6”。

”难道座位顺序还会发生变化吗?“我问。

在新的位置坐下后,老爷爷才回答道:“没错,不过这次看起来运气还不错。我们的位置都没有变动。”

“这个规则是怎么计算的呢?”我连忙追问,不知道的东西太多了,心慌呀。

“进入工厂时的位置计算,是先调用我们自身的hashCode()方法获取值,再用这个值对椅子的数量(数组长度)进行取模运算。就算出我们的位置了。“

”好复杂。“我都没太听懂,一会儿再仔细想想。”那执行扩容流程后的位置呢?也是这样计算的?“

这一次老爷爷没有回答,而是提醒道:”别着急,先处理你的麻烦吧。“

麻烦

麻烦?什么麻烦?我还来不及细想,就感觉腿上多了什么东西,隐隐还有一股幽香传入鼻中。

什么情况!我腿上居然坐着一位短裤女郎!

”你占了我的位置。“她翘着二郎腿头也不回的说着。

“没… …没有啊。”我结结巴巴的说,脸上突然变得滚烫起来。

我瞥了一眼她手上的电子显示屏,上面一个大大的数字“6”… …

结语

你知道‘小月’到底遭遇了什么吗?下一篇揭晓。

To be continued… …

任何美好的事情都值得分享,关于生活,关于工作(认真工作可以让生活更美好)。如果喜欢我的文章,可以关注我的公众号【猿月亮】,欢迎找我聊天。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值