有趣的小算法

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

相关推荐
i***27954 分钟前
Spring boot 3.3.1 官方文档 中文
java·数据库·spring boot
zhengzizhe11 分钟前
LangGraph4j LangChain4j JAVA 多Agent编排详解
java·后端
embrace9922 分钟前
【C语言学习】结构体详解
android·c语言·开发语言·数据结构·学习·算法·青少年编程
重整旗鼓~24 分钟前
3.会话功能-AiServices工具类
java·语言模型·langchain
代码不停39 分钟前
Java单链表和哈希表题目练习
java·开发语言·散列表
Dxxyyyy41 分钟前
零基础学JAVA--Day37(坦克大战1.0)
java·开发语言
Ayanami_Reii42 分钟前
基础数学算法-开关问题
数学·算法·高斯消元
OranTech1 小时前
第28节课-夕夕超市收银系统(下)-笔记
java
稚辉君.MCA_P8_Java1 小时前
通义 Go 语言实现的插入排序(Insertion Sort)
数据结构·后端·算法·架构·golang
IDOlaoluo1 小时前
jakarta-tomcat-connectors-jk2-src.tar.gz 安装教程(详细步骤及附安装包)
java·tomcat