有趣的小算法

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

相关推荐
Y学院几秒前
Spring AI Alibaba 高质量实战教程(从入门到企业级落地)
java·人工智能·spring·自然语言处理
水木流年追梦5 分钟前
CodeTop Top 300 热门题目3-字符串相加
java·前端·算法
编程之升级打怪6 分钟前
自定义实现Java的HashMap集合
java·开发语言
后端AI实验室8 分钟前
我带的那个实习生,比我更依赖AI——但他的问题和我完全不同
java·ai
一江寒逸9 分钟前
数据结构与算法之美:绪论——构建算法思维的基石
数据结构·算法
y小花9 分钟前
安卓StorageManagerService
android·java
码王吴彦祖10 分钟前
AI 逆向分析国航 AirChina FECU 参数来源并实现离线生成
android·java·javascript
LJianK110 分钟前
进程、线程、多线程、异步
java·开发语言·jvm
ch.ju14 分钟前
Java程序设计(第3版)第二章——循环结构1
java
大黄烽14 分钟前
IDEA中集成AI 工具CodeBuddy和Trae区别和选型
java·人工智能·intellij-idea