有趣的小算法

找到一个大于等于目标容量的最小的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

相关推荐
叫我莫言鸭4 分钟前
关于word生成报告的POI学习2循环标题内容
java·学习·word
hans汉斯6 分钟前
基于数据重构与阈值自适应的信用卡欺诈不平衡分类模型研究
大数据·算法·机器学习·重构·分类·数据挖掘·机器人
七夜zippoe9 分钟前
Spring与MyBatis整合原理及事务管理
java·spring·mybatis·事务·mapper
ZPC82109 分钟前
FANUC 机器人 PR 寄存器
人工智能·python·算法·机器人
yong999011 分钟前
超宽带系统链路 MATLAB 仿真
开发语言·算法·matlab
yaoxin52112313 分钟前
278. Java Stream API - 限制与跳过操作全解析
java·开发语言·python
短剑重铸之日20 分钟前
《深入解析JVM》第五章:JDK 8之后版本的优化与JDK 25前瞻
java·开发语言·jvm·后端
love530love23 分钟前
【探讨】“父级/基环境损坏,子环境全部失效”,如何避免 .venv 受父级 Python 损坏影响?
java·开发语言·人工智能·windows·python·编程·ai编程
历程里程碑33 分钟前
LeetCode 560题:和为K子数组最优解
算法·哈希算法·散列表
java硕哥42 分钟前
Spring源码debug方法
java·后端·spring