重庆 网站开发,国内十大设计公司,最好的看vr影片的设备,苏省住房和城乡建设厅网站Java 中 BitSet 类的用法 API构造置位为 true清除为 false查找位反转长度运算流其他 原理底层数据结构如何工作 API
构造
无参构造 #xff1a;默认为 64 个 bit 的容量 BitSet bitset new BitSet();有参构造 #xff1a;设置为 n 个 bit 的容量 BitSet bitset new BitSe… Java 中 BitSet 类的用法 API构造置位为 true清除为 false查找位反转长度运算流其他 原理底层数据结构如何工作 API
构造
无参构造 默认为 64 个 bit 的容量 BitSet bitset new BitSet();有参构造 设置为 n 个 bit 的容量 BitSet bitset new BitSet(1024);静态工厂的 valueOf 构造 支持从 byte[], long[], ByteBuffer, LongBuffer 四种类型构造 Bitset BitSet.valueOf(bytes);BitSet.valueOf(longs);BitSet.valueOf(byteBuffer);BitSet.valueOf(longBuffer);置位为 true
单独置位 bitset.set(4);//索引为4的位置的比特被置为1返回void批量置位 bitset.set(4,6);//索引在[4,6)范围内的位置的比特被置为1返回void清除为 false
单独清除 bitset.clear(4);//索引为4的位置的比特被置为0返回void批量清除 bitset.clear(4,6);//索引在[4,6)范围内的位置的比特被置为0返回void全部清除 bitset.clear();//所有位置都被清空为0返回void查找
查询某一位是否已被置位 bitset.get(4);//返回boolean为true表示该位被置位获取某区间的 BitSet bitset.get(4,6);//返回另一个 BitSet内容取 bitset的[4,6)之间的元素注获取的区间后索引的编号会改变比如这里新的 BitSet 的 0 号索引对应的是原来 BitSet 的 4 号索引
位反转 bitset.flip(4);bitset.flip(4,6);长度
有三个和长度相关的 API分别是 size、cardinal、length
size返回该 BitSet 的最大容量cardinal返回该 BitSet 中 1 的个数length返回最后一个1之前的所有元素的个数如果一个1也没有就返回0
运算
判断是否有交集 first.intersects(second);//返回boolean如果有交集元素则为true求交集 first.and(second);//返回一个 BitSet求并集 first.or(second);//返回一个 BitSet求异或集 first.xor(second);//返回一个 BitSet流 bitSet.stream();//返回一个 Stream 流其他
下面四个方法顾名思义 int idx bitset.nextSetBit(fromIndex);int idx bitset.previousSetBit(fromIndex); int idx bitset.nextClearBit(fromIndex);int idx bitset.previousClearBit(fromIndex); 原理
底层数据结构
BitSet 的底层数据结构是 long[] 数组
如何工作
置位时把1左移对应的位数再与 long[] 中特定的 long 元素做或运算 查询时把1左移对应的位数再与 long[] 中特定的 long 元素做与运算运算结果大于0说明该位为true