创建BitSet时能否直接设置指定位?Java BitSet初始化相关技术问询
实现方案
完全可以在创建BitSet实例的同时完成指定位设置,常用的实现方式有三种:
自定义工具方法(生产环境最推荐)
自己封装静态工具方法统一处理创建+设位逻辑,无任何额外副作用,全Java版本兼容,示例代码如下:// 提前定义公共工具方法 public static BitSet buildBitSet(int... bits) { BitSet bs = new BitSet(); for (int b : bits) { bs.set(b); } return bs; } // 循环中直接调用即可 ArrayList<BitSet> bitSetList = new ArrayList<>(); for (int x : array) { // 传入所有需要设置的位下标即可 bitSetList.add(buildBitSet(x, x + 1, x * 2)); }双大括号初始化(仅临时测试用,不推荐生产)
可以用匿名内部类的初始化块快速实现,缺点是会额外生成匿名类,持有外部类引用容易引发内存泄漏:for (int x : array) { bitSetList.add(new BitSet() {{ // 直接在初始化块中写设位逻辑 set(x); set(100); }}); }Java 9+ 内置静态方法构造
如果使用Java 9及以上版本,可直接调用BitSet.valueOf()系列静态方法构造,但需要自行把要设置的位转换成对应字节/长整型数组,灵活度不如自定义工具方法。
内容的提问来源于stack exchange,提问作者pileup
相关产品推荐
相关产品推荐

