有趣的小算法

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

相关推荐
ShiXZ2136 小时前
Java 8 Stream API 实用技巧详解:从入门到精通
java·开发语言
冻柠檬飞冰走茶6 小时前
PTA基础编程题目集 7-27 冒泡法排序(C语言实现)
c语言·开发语言·数据结构·算法
C++、Java和Python的菜鸟7 小时前
第9章 后端Web进阶(AOP)
java·开发语言·前端
东北赵四7 小时前
关于Java泛型的知识点及其相关面试题
java·windows·python
姓蔡小朋友7 小时前
Java线程并发
java·开发语言·python
执笔画流年呀7 小时前
⾃动化测试常⽤函数
java·dubbo
疯狂打码的少年7 小时前
【面向对象】UML概述(基本构造块:事物/关系/图)
java
大鱼>8 小时前
因子挖掘+回测+RL交易:量化金融完整系统
人工智能·深度学习·算法·金融
一水8 小时前
TTFT优化:一个方案的5次推倒重来
java·ai·状态模式
AC赳赳老秦8 小时前
CSDN 技术社区数据采集:OpenClaw 抓取公开技术热帖,生成领域技术热点周报
java·大数据·前端·数据库·python·php·openclaw