You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将长度为32的BitSet的所有位填充为0?

问题原因

你遇到的set(i, false)没生效的问题,是BitSet的底层实现逻辑导致的:

  • BitSet构造方法传入的32是初始容量,不是固定的位长度,它本身是动态扩容的结构
  • 未被设置为true过的位,默认就是false状态,也不会在底层数组中实际分配空间。你直接对未初始化的位调用set(i, false),BitSet会判定不需要做任何修改,所以看起来没有填充效果。

实现32位全0的几种方案

  • 方案1:利用你现有已经把0~31位全部设为1的逻辑,直接调用clear()方法统一清空
    longWord = new BitSet(32);
    // 先把0~31位全部设为1,完成位初始化
    for(int i = 0; i < 32; i++)  {
        longWord.set(i);
    }
    // 直接清空所有位为false
    longWord.clear();
    System.out.println(longWord);
    
  • 方案2:用范围设置方法直接批量赋值,不需要提前初始化
    直接调用set(int fromIndex, int toIndex, boolean value)方法,它会自动完成范围内位的初始化再赋值:
    longWord = new BitSet(32);
    // 直接把0~32位(左闭右开)全部设为false
    longWord.set(0, 32, false);
    
  • 方案3:直接从全0的long数组生成BitSet(Java 1.7+支持)
    // 一个long元素对应64位,全部初始为0,生成的BitSet对应前64位全为0,32位场景完全够用
    longWord = BitSet.valueOf(new long[1]);
    

内容的提问来源于stack exchange,提问作者Frank Fiumara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 09:00:00