有趣的小算法

找到一个大于等于目标容量的最小的2的幂次方数,常用于实现具有动态扩展能力的数据结构。

示例:HashMap的扩容大小机制。

java 复制代码
static final int tableSizeFor(int cap) {
    int n = cap - 1;
    n |= n >>> 1;
    n |= n >>> 2;
    n |= n >>> 4;
    n |= n >>> 8;
    n |= n >>> 16;
    return (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + 1;
}
  • a. 将n无符号右移一位。
  • b. 对原n和右移后的n进行按位或操作。
  • c. 将结果赋值回n。

这样做的目的是为了确保n的二进制表示中的所有非零位都被设置为1。这是因为每次右移一位后,原最高位会被移到次高位,并且按位或操作可以保证只要原来的最高位为1,那么新的次高位也将变为1。重复这个过程直到所有可能的位置都被覆盖到,从而得到大于等于目标容量的最小的2的幂次方数。

当cap = 25,最后返回32

相关推荐
雨中飘荡的记忆13 小时前
Spring Test详解
java·后端·spring
sugar__salt14 小时前
网络编程套接字(二)——TCP
java·网络·网络协议·tcp/ip·java-ee·javaee
颜颜yan_14 小时前
跨越x86与ARM:openEuler全架构算力实战评测
java·arm开发·架构
立志成为大牛的小牛14 小时前
数据结构——五十三、处理冲突的方法——拉链法(王道408)
数据结构·学习·考研·算法
毕设源码-朱学姐14 小时前
【开题答辩全过程】以 陪诊就医小程序设计与实现为例,包含答辩的问题和答案
java
动感小麦兜14 小时前
NAS学习
java·开发语言·eureka
吃着火锅x唱着歌14 小时前
LeetCode 3583.统计特殊三元组
算法·leetcode·职场和发展
FPGA_无线通信14 小时前
OFDM 频偏补偿和相位跟踪(2)
算法·fpga开发
小安同学iter14 小时前
天机学堂day05
java·开发语言·spring boot·分布式·后端·spring cloud·微服务
那我掉的头发算什么14 小时前
【javaEE】文件&IO--文件内容操作
java·java-ee·文件·文件操作