原文:【Java集合】为什么HashMap的长度是2的N次幂?

这个问题应该倒过来思考,HashMap的长度是 的N次幂,有什么优势 在HashMap的putVal 方法中,为了确定插入元素在table 数组中的下标位置,使用的与 amp 运算来计算 如下代码 n amp hash 这个操作如果在n为 的N次幂的情况下是等同于 hash n 取余数的值 至于为什么要使用与 amp 运算呢: 因为与运算的效率要高于hash n取余的运算 这也就解释了为什么Has ...

2020-03-21 17:31 2 2449 推荐指数:

查看详情

Java集合框架_ HashMap长度为什么是2的次方

为了能让HashMap存取高效,尽量减少碰撞,也就是要尽量把数据分配均匀,Hash值的范围是-2147483648到2147483647,前后加起来有40亿的映射空间,只要哈希函数映射的比较均匀松散,一般应用是很难出现碰撞的,但一个问题是40亿的数组内存是放不下的。所以这个散列值是不能直接拿来 ...

Tue Aug 06 06:00:00 CST 2019 0 1328
HashMap内部数组长度为什么是2的

用&运算代替%运算,若不为2的,内部数组会存在浪费 index = (tab.length - 1) & hash 若不为2的,则减一后低位必存在0,这样相与后该位结果为0,那么在该位上为1的索引永远用不到,数组存在浪费 扩容时,方便定位 当相与的该位 ...

Sat Nov 02 01:47:00 CST 2019 0 726
为什么HashMap扩容是2倍以及容量为什么是2的n

** java8** 为什么HashMap扩容是2倍以及容量为什么是2的n,和这个数组下标的计算方法有着千丝万缕的关系。 先看看计算数组下标源码: 由上图我们可以看到,<key,value>要放到数组的那个位置,它会通过key的hash值和数组长度-1进行与运算来计算得出。也就 ...

Wed Mar 16 04:15:00 CST 2022 0 1145
为何HashMap的数组长度一定是2的

https://blog.csdn.net/Tane_1018/article/details/103392267 通过上边可以看到,当数组长度不为2的n 的时候,hashCode 值与数组长度减一做与运算 的时候,会出现重复的数据,因为不为2的n 的话,对应的二进制数肯定有一位 ...

Wed Jul 29 00:03:00 CST 2020 0 1148
为什么hashMap的容量是2的

HashMap通过哈希算法得出哈希值之后,将键值对放入哪个索引的方法 static int indexFor(int h, int length) { // assert Integer.bitCount(length) == 1 : "length must ...

Tue Mar 13 22:51:00 CST 2018 0 1244
HashMap长度为什么要是2的n次方

HashMap为了存取高效,要尽量较少碰撞,就是要尽量把数据分配均匀,每个链表长度大致相同,这个实现就在把数据存到哪个链表中的算法;这个算法实际就是取模,hash%length,计算机中直接求余效率不如位移运算,源码中做了优化hash&(length-1),hash ...

Tue Mar 20 23:28:00 CST 2018 0 3784
2的n

问题描述 任何一个正整数都可以用2进制表示,例如:137的2进制表示为10001001。  将这种2进制表示写成2的的和的形式,令高的排在前面,可得到如下表达式:137=2^7+2^3+2^0  现在约定用括号来表示,即a^b表示为a(b)  此时,137可表示 ...

Wed Oct 31 07:12:00 CST 2018 0 1531
 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM