hashmap面试扩容机制 hashmap在,扩容,时为什么是乘以2?
hashmap在,扩容,时为什么是乘以2?
长度为2的n次方,取模运算可以用位操作h&(length-1)来求得,这样效率最高
为什么HashMap的数组长度一定是2的次幂?
两个原因
1.查找和增加元素是使用的取模运算来找到数组下标,而取模运算如果是对2的n次幂,那么可以用&位运算符代替,效率比较高。
2.扩容的时候方便。
直接看源码就明白了,扩容的resize方法的参数是2*table.length(图中是JDK7的源码),意味着每次扩容都是2倍扩容,扩容之后就需要进行数据迁移了。如果初始长度是2的n次幂,扩容就会减少数据的迁移次数。
举个例子初始长度是16,扩容到32后。之前在1位置的节点,扩容之后之后只会迁移到1和17的位置,其实就是之前在i的位置,扩容之后只会在i和i 之前数组的长度。
比如17,在数组长度是16的时候,在1的位置,当扩容到32后,就会迁移到17的位置
比如1,在数组长度是16的时候,在1的位置,当扩容到32后,还在1的位置。
主要就是这个原因了。
顺便提下源码里就是你不设置为2的n次幂,也会帮你设置为2的n次幂,比如说你传15,会帮你设置为16的,源码对应的方法是roundUpToPowerOf2。
希望对你有帮助。可以关注我,会分享一些源码思路的知识
精通spring全家桶,被15家公司拒绝,大专程序员出路在哪?
看你的情况,说明你对自己还是比较自信,认为自己却掌握了比较全方位的技术,但是在面试过程中你屡屡碰壁,连续被多家单位和企业拒绝,抛开他们是否有眼光不说,这其中肯定有你自己的问题。建议你在以下几个方面,查找自己面试过程中的不足。
1.是否把你的能力真正的展示出来了。
作为技术员而言,学历是一个方面,可以作为一个参考,但并不是最重要,最重要的是有实打实的技术。企业需要的是能够解决问题的技术员,而不是需要学历高的技术员,这一点是很肯定的,所以你不必过于在意自己学历不高的问题。如果是要需要学历撑门面的话,本科研究生或许都什么用,至少也要找一个专家来撑门面。所以,很有可能是在你在面试的过程中,你并没有把自己的能力真正的完全的展示出来。
2.是否有自己的代表作品。
企业在面试的过程中,通常都会与应聘者进行沟通,但是这些沟通都比较宏观,也是一种感性的认识。你在面试的过程中,除了你介绍自己的技术全面之外,如果你能够拿出自己具有代表性的作品,那么可以增强你的说服力,大大增加自己应试的筹码。
3.是否对自己的工作经历进行了系统梳理。
企业招聘人员的时候,要在短时间认识和了解一个人,本身这是一项难度很高的事情,所以给每个应聘者的时间并不是很多。那么,你在面试之前,要对自己的工作经历,取得的业绩或成果,对未来的发展设想,进行系统全面的梳理,以便于更高效的与相关的招聘人员进行沟通。不能以为自己是理工科类别,干的是技术活,就不需要梳理和总结。
祝你能早日找到满意的工作。
map扩容为什么是2倍?
map计算添加元素的位置时,使用的位运算,这是特别高效的运算;另外,HashMap的初始容量是2的n次幂,扩容也是2倍的形式进行扩容,是因为容量是2的n次幂,可以使得添加的元素均匀分布在HashMap中的数组上,减少hash碰撞,避免形成链表的结构,使得查询效率降低。
hashmap面试扩容机制 hashmap为什么扩容2倍 hashmap扩容过程
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。