hashMap默认起始容量是16 为什么。

 我来答
百度网友42ccef7
2020-06-19 · 超过90用户采纳过TA的回答
知道答主
回答量:342
采纳率:24%
帮助的人:99.3万
展开全部
为后来者解惑!
先抛出俩个问题:
1.为什么hashmap的容量约定是the power of 2 size呢
2.基于问题1的前提下,为什么不是32,或者8呢
回答:hashmap是基于数组的,源码: transient Node<K,V>[] table;
table俗称hash桶(hash bin),将一个元素放到桶里时,不是像arraylist那样按顺序放,而是根据key的hash值来计算index。
这个时候就会产生hash碰撞,即如果算法不合法,key会大概率的计算到同一个index,从而使元素都放在同一个桶中。
为了减少哈希碰撞的几率,我们需要一个算法,该算法能让元素比较平衡的放到不同的桶中,最简单的方式就是key.hash % table.length,为了效率,使用了位与&运算符。源码中使用了tab[i = (n - 1) & hash]。
当n=the power of 2时,n-1的二进制的后几位全是1,这时上文提到的【&】操作更均匀。
问题2,为什么是16呢,源码中是这么写的,Maybe a tradeoff between speed, utility, and quality of bit-spreading.就是考虑到速度,实用性和位拓展质量后的一个【最佳实践】。仅仅是一个最佳实践。可以根据自己的实际业务场景来设置不同的值,比如4,8等
280730086
2014-06-30
知道答主
回答量:46
采纳率:0%
帮助的人:20.9万
展开全部
源码中有这么一句,static final int DEFAULT_INITIAL_CAPACITY = 1 << 4;
无参构造函数就是使用这个来进行初始化的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式