您的位置:首页 > 编程语言 > Java开发

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

2017-04-01 17:09 281 查看
在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的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: