【你问我答】100个元素的哈希表设置多大容器能避免出现扩容?

问题描述:

100个元素的HashMap设置多大的容器可以避免出现扩容?

回答有奖:

选取一位认真回答问题的牛友,赠送200牛币!
▶回答尽量有自己的思考,不要单纯的只是复制粘贴定理定义,或者他人blog哦~

你问我答问题汇总:点击进入
关注你问我答栏目:点击关注

你问我答 - 答问题,成大佬,拿牛币!
你问我答是牛客新栏目,每周1期几个面试中真实遇到的问题,
牛友在问题贴下留下自己的知识,经验与见解,
帮助更多牛友了解更多技术相关知识!
#悬赏##Java##面试题目#
全部评论
在Java当中,HashMap的默认大小是16,而负载因子的大小是0.75,因此当元素超过16*0.75=12个的时候就会触发扩容。哈希表扩容是一个耗时的操作,因此我们可以指定其大小防止触发扩容从而提高程序的效率。 一般来说计算的方法是:(所需大小/负载因子) + 1。比如说我们需要存储100个元素,在使用默认负载因子的情况下,需要指定大小为100/0.75+1,约等于135个。 另外,负载因子也是可以在构造HashMap的时候传入参数的,当负载因子设置比较小的时候,触发扩容的阈值就比较低,哈希冲突的概率也会更低,这是空间换时间的思想。反之,就是时间换空间。 总的来说,还是遵循上文提到的公式:(所需大小/负载因子) + 1。
点赞 回复
分享
发布于 2020-11-10 22:35
HashMap的默认负载因子是0.75,就是说当前的元素数量 = 容量*0.75的时候会触发扩容。所以我们应该满足 元素数量 <= 容量*0.75 -1, 带入数量100,求得容量为135。 但是我认为容量取256更好,HashMap是根据key的hash值决定key放入到哪个桶中,通过 (容量 - 1) & hash公式计算得出,如果不是容量不是2的幂的话,有些桶始终访问不到。
点赞 回复
分享
发布于 2020-11-11 13:18
英特尔
校招火热招聘中
官网直投

相关推荐

点赞 1 评论
分享
牛客网
牛客企业服务