有趣的小算法

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

相关推荐
皮卡蛋炒饭.22 分钟前
数据结构—排序
数据结构·算法·排序算法
全栈凯哥36 分钟前
16.Spring Boot 国际化完全指南
java·spring boot·后端
M1A143 分钟前
Java集合框架深度解析:LinkedList vs ArrayList 的对决
java·后端
Top`1 小时前
Java 泛型 (Generics)
java·开发语言·windows
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ1 小时前
如何使用Java WebSocket API实现客户端和服务器端的通信?
java·开发语言·websocket
??tobenewyorker1 小时前
力扣打卡第23天 二叉搜索树中的众数
数据结构·算法·leetcode
是小崔啊1 小时前
tomcat源码02 - 理解Tomcat架构设计
java·tomcat
贝塔西塔2 小时前
一文读懂动态规划:多种经典问题和思路
算法·leetcode·动态规划
没有bug.的程序员2 小时前
JAVA面试宝典 -《安全攻防:从 SQL 注入到 JWT 鉴权》
java·安全·面试
栈溢出了2 小时前
MyBatis实现分页查询-苍穹外卖笔记
java·笔记·mybatis