有趣的小算法

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

相关推荐
NE_STOP1 分钟前
Redis--持久化之AOF
java
budingxiaomoli2 分钟前
注册中心的其他实现-Nacos
java·spring cloud·微服务
joshchen2157 分钟前
强化学习基础(赵世钰)第一章
人工智能·深度学习·算法·机器学习·强化学习
大大大大晴天️13 分钟前
Flink技术实践-Flink重启策略选型指南
java·大数据·flink
小此方14 分钟前
Re:从零开始的 C++ STL篇(十二)深度解析哈希函数设计、负载因子调节与两种冲突处理策略
c++·算法·哈希算法
ffqws_19 分钟前
Spring @Transactional 注解详解:从入门到避坑
java·数据库·后端·spring
xuhaoyu_cpp_java20 分钟前
单调栈(算法)
java·数据结构·经验分享·笔记·学习·算法
黑夜里的小夜莺36 分钟前
黑马点评登录成功后点击【我的】会跳转到登录页面 BUG 修复
java·bug
诙_1 小时前
C++数据结构--排序算法
数据结构·算法·排序算法
wuyikeer1 小时前
Java进阶——IO 流
java·开发语言·python