我是小月,通过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… …
任何美好的事情都值得分享,关于生活,关于工作(认真工作可以让生活更美好)。如果喜欢我的文章,可以关注我的公众号【猿月亮】,欢迎找我聊天。