HashMap源码中位运算符是如何实现的?
- 内容介绍
- 文章标签
- 相关推荐
本文共计620个文字,预计阅读时间需要3分钟。
在最近阅读HashMap源码时,发现很多运算符被常规运算符替代。例如,用hash + (table.length - 1)代替hash % table.length;用if((e.hash + oldCap)==0)判断扩容后元素的位移等。
引言
最近在读HashMap源码的时候,发现在很多运算符替代常规运算符的现象。比如说用hash & (table.length-1) 来替代取模运算hash&(table.length);用if((e.hash & oldCap) == 0)判断扩容后元素的位置等等。
1.取模运算符%底层原理
总所周知,位运算&直接对二进制进行运算;而对于取模运算符%:a % b 相当于 a - a / b * b,底层实际上是除法器,究其根源也是由底层的减法和加法共同完成。所以其运行效率要远远小于位运算符&。
本文共计620个文字,预计阅读时间需要3分钟。
在最近阅读HashMap源码时,发现很多运算符被常规运算符替代。例如,用hash + (table.length - 1)代替hash % table.length;用if((e.hash + oldCap)==0)判断扩容后元素的位移等。
引言
最近在读HashMap源码的时候,发现在很多运算符替代常规运算符的现象。比如说用hash & (table.length-1) 来替代取模运算hash&(table.length);用if((e.hash & oldCap) == 0)判断扩容后元素的位置等等。
1.取模运算符%底层原理
总所周知,位运算&直接对二进制进行运算;而对于取模运算符%:a % b 相当于 a - a / b * b,底层实际上是除法器,究其根源也是由底层的减法和加法共同完成。所以其运行效率要远远小于位运算符&。

