社区
Java SE
帖子详情
扩容机制中的capacity初始值为什么是16,可不可以自定义成15,为什么一定要是2的指数次方,求指教,感谢
jvliao
2020-12-31 05:09:41
...全文
7394
2
打赏
收藏
扩容机制中的capacity初始值为什么是16,可不可以自定义成15,为什么一定要是2的指数次方,求指教,感谢
[图片]
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
一个帅逼
2020-12-31
打赏
举报
回复
你可以设置15,但是实际会被转换成16,可以看看源码里的tableSizeFor()方法,通过这个方法会将你设置的capacity-1通过位移运算变为最接近的下一个2的n次幂,设置为2的n次方主要是为了快速定位到数组的slot上,2的n次方-1的二进制会使当前capacity的低位全部变为1,再通过与hahs值的&运算可以得到数组slot,区别于取模运算,取模可以设置任何值,但是取模运算效率没有&运算高
是赵敢敢啊
2020-12-31
打赏
举报
回复
写成2的次幂的话计算机做位移预算比较快,应该是这样
HashMap底层的
扩容机制
(以及2倍扩容的原因)
文章目录HashMap底层的
扩容机制
resize扩容resize源码源码文字说明HashMap底层为什么是2倍扩容? HashMap底层的
扩容机制
resize扩容 HashMap会在两个地方进行resize(扩容): 1 ,HashMap实行了懒加载, 新建HashMap时不会对table进行赋值, 而是到第一次插入时, 进行resize时构建table; 2, 当HashMap.size 大...
HashMap的
扩容机制
为什么是2幂
假设length为Hash表数组的大小,方法indexFor(int hash, int length)为 indexFor(int hash, int length) { return hash % length; } 在旧数组
中
同一条Entry链上的元素,在resize过程
中
,通过重新计算索引位置后,有可能被放到了新数组的不同位置上。JDK8做了一些优化,resize过程
中
对H...
面试题:HashMap
扩容机制
扩容机制
1.什么时候才需要扩容 在首次调用put方法的时候,初始化数组table 当HashMap
中
的元素个数超过数组大小(数组长度)*loadFactor(负载因子)时,就会进行数组扩容,loadFactor的默认值(DEFAULT_LOAD_FACTOR)是0.75,这是一个折
中
的取值。也就是说,默认情况下,数组大小为
16
,那么当HashMap
中
的元素个数超过
16
×0.75...
HashMap的
扩容机制
、初始化容量大小的选择、容量为什么是2的次幂
当我们要put 7个元素, init
Ca
pac
ity
= 7 / 0.75 + 1 = 10 ,经过HashMap的计算,第一个大于10的2的次幂的数是
16
,所以HashMap的容量是
16
。我们初始化HashMap时,除了可以指定初始化容量大小外,还可以指定装载因子的大小的,但是修改装载因子的值是不推荐的。在我们创建HashMap时,就做了第一步处理,选择大于等于给定数字的第一个2的次幂作为容量,就保证了。当HashMap 发生扩容时,会新建一个指定容量的桶,然后将原来的Entry拷贝到新的桶
中
。
图解HashMap扩容和ArrayList的
扩容机制
。
前言 众所周知,hashmap和Arraylist作为java
中
非常重要的一种数据结构,应用场景非常广泛,这篇文章主要针对HashMap和ArrayList的
扩容机制
进行分析。 HashMap
扩容机制
分析 在说HashMap
扩容机制
之前,有必要简述下HashMap的基本结构。以便各位更加清除的理解HashMap的底层是如何扩容的。HashMap自JDK1.8之后结构采用数组+单链表【单链表长度达到...
Java SE
62,620
社区成员
307,251
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章