有趣的小算法

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

相关推荐
青椒大仙KI119 分钟前
24/9/19 算法笔记 kaggle BankChurn数据分类
笔记·算法·分类
试行10 分钟前
Android实现自定义下拉列表绑定数据
android·java
^^为欢几何^^13 分钟前
lodash中_.difference如何过滤数组
javascript·数据结构·算法
豆浩宇13 分钟前
Halcon OCR检测 免训练版
c++·人工智能·opencv·算法·计算机视觉·ocr
茜茜西西CeCe16 分钟前
移动技术开发:简单计算器界面
java·gitee·安卓·android-studio·移动技术开发·原生安卓开发
救救孩子把21 分钟前
Java基础之IO流
java·开发语言
小菜yh22 分钟前
关于Redis
java·数据库·spring boot·redis·spring·缓存
宇卿.29 分钟前
Java键盘输入语句
java·开发语言
浅念同学29 分钟前
算法.图论-并查集上
java·算法·图论
何不遗憾呢38 分钟前
每日刷题(算法)
算法