有趣的小算法

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

相关推荐
孤飞2 小时前
zero2Agent:面向大厂面试的 Agent 工程教程,从概念到生产的完整学习路线
算法
技术专家3 小时前
Stable Diffusion系列的详细讨论 / Detailed Discussion of the Stable Diffusion Series
人工智能·python·算法·推荐算法·1024程序员节
dllxhcjla3 小时前
微服务全套
java
csdn_aspnet3 小时前
C# (QuickSort using Random Pivoting)使用随机枢轴的快速排序
数据结构·算法·c#·排序算法
亚历克斯神4 小时前
JVM 内存管理 2026:深度解析与调优实战
java·spring·微服务
鹿角片ljp4 小时前
最长回文子串(LeetCode 5)详解
算法·leetcode·职场和发展
逻辑驱动的ken4 小时前
Java高频面试题:03
java·开发语言·面试·求职招聘·春招
广师大-Wzx5 小时前
一篇文章看懂MySQL数据库(下)
java·开发语言·数据结构·数据库·windows·python·mysql
野生技术架构师5 小时前
Java NIO到底是个什么东西?
java·开发语言·nio
paeamecium5 小时前
【PAT甲级真题】- Cars on Campus (30)
数据结构·c++·算法·pat考试·pat