Java8源码阅读之HashMap之调试验证和思考

在IDE里调试验证

        我在刚开始验证时,new Hash(1)时,在其内部设置断点,查看,怎么变成了31,而不是1,很是郁闷;开始怀疑是不是编译时做了优化,但是反编译出来的源码,还是1啊?

原来在加载HashMap类时,JVM调用多次HashMap的方法。所以在调试验证时,需要确保当前断点是在自己的对象中。

思考:

        我们已经知道new HashMap(1),本意是想加一个元素,但实际上,在put的时候进行了一次真正resize()。也就两次new数组,然后移动数据。这样的话,是不是上一篇文章中介绍的方法,直接new HashMap(2),这样只new了一次数组,且没有resize,只是浪费了一个空间而已。

        但还有个更好的方法,new HashMap(1, 1)。加载因子是1,100%;所以这是perfect!!!

        那是不是以后我们都尽量要用new HashMap(n, 1),加载因子是1的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值