所用jdk版本为1.6.
BitSet是一个按需增长的位向量,位向量指有大小端的由0,1组成的串。此类是线程不安全的。
索引从0开始,负数索引会异常,位向量的每个位都有一个boolean值,默认情况下,初始值都是false。
BitSet
表示位值时实际使用空间的位数由size()方法返回,返回值是64的倍数,最小是64。length()方法返回的是实际使用的位大小,结果是最高设置位的索引加1。
BitSet还可以进行逻辑运算,比如与、或、异或。
BitSet的toString方法返回的是设置了true值的所有索引。
BitSet有两个构造方法:一个默认构造,一个可以传初始大小的构造。它的大小是按需增长的,如果考虑到性能,最好选择一个初始大小。
import java.util.BitSet;
public class Demo {
public static void main(String args[]) {
BitSet bs1 = new BitSet(16);
BitSet bs2 = new BitSet(16);
BitSet bs3 = new BitSet();
BitSet bs4 = new BitSet();
// intersects,如果两个BitSet中至少有一位双方都设置为true,则返回true
bs3.set(1);
bs3.set(2);
bs4.set(1);
System.out.println(bs3.intersects(bs4));// 输出true
// length/size
bs3.set(100);// 设置索引为100的位为true
System.out.println(bs3.size());// 输出128,因为我们在索引100设置了值,因此64容纳不下,只能选择64*2=128才能够容纳。
System.out.println(bs3.length());// 输出101,表示使用了101位二进制。
// toString,输出值为true的索引,set方法用于设置索引的值,有几个重载,具体看文档
for (int i = 0; i < 16; i++) {
if ((i % 2) == 0)
bs1.set(i);
if ((i % 3) == 0)
bs2.set(i);
}
System.out.println(bs1);// 输出{0, 2, 4, 6, 8, 10, 12, 14}
System.out.println(bs2);// 输出{0, 3, 6, 9, 12, 15}
// flip,即某位的值如果是true则设为false,false则设为true,第一个参数表示从哪个索引开始,第二个表示到哪个索引的前一个索引结束
bs1.flip(0, bs1.length());
bs2.flip(0, bs2.length());
System.out.println(bs1);// 输出{1, 3, 5, 7, 9, 11, 13}
System.out.println(bs2);// 输出{1, 2, 4, 5, 7, 8, 10, 11, 13, 14}
// clear,所有位设为false
bs1.clear();
bs2.clear();
System.out.println(bs1);// 输出{}
System.out.println(bs2);// 输出{}
// and/or/xor 这些方法改变的是当前BitSet而不是目标BitSet(即方法参数BitSet)
// 重置bs1和bs2
for (int i = 0; i < 16; i++) {
if ((i % 2) == 0)
bs1.set(i);
if ((i % 3) == 0)
bs2.set(i);
}
bs2.and(bs1);
System.out.println(bs2);// 输出{0, 6, 12}
// 重置bs1和bs2
for (int i = 0; i < 16; i++) {
if ((i % 2) == 0)
bs1.set(i);
if ((i % 3) == 0)
bs2.set(i);
}
bs2.or(bs1);
System.out.println(bs2);// 输出{0, 2, 3, 4, 6, 8, 9, 10, 12, 14, 15}
// 重置bs1和bs2
for (int i = 0; i < 16; i++) {
if ((i % 2) == 0)
bs1.set(i);
if ((i % 3) == 0)
bs2.set(i);
}
bs2.xor(bs1);
System.out.println(bs2);// 输出{3, 9, 15}
// get,获取指定索引的值
System.out.println(bs2.get(3));// 输出true
// cardinality,返回值为true的位数
System.out.println(bs2.cardinality());// 输出3
// 其他方法看文档
}
}
分享到:
相关推荐
java bitset 高级数据结构 源码解析 适合 0-3 年开发人员,进阶、面试必备知识!
Java BitSet 使用场景和代码示例 Java BitSet 是 Java 中的一个重要类,它实现了一个按需增长的位向量。BitSet 的每一个组件都有一个 boolean 值,用非负的整数将 BitSet 的位编入索引。可以对每个编入索引的位进行...
bitset源码Java源码分析 基础集合列表 ArrayList (done) Vector (done) LinkedList (done) Stack (done) ReferenceQueue (done) ArrayDeque (done) Set HashSet (done) TreeSet (done) LinkedHashSet (done) BitSet ...
java bitset 源码 最后更新于20180424 (Toc generated by ) 数据结构 队列 非阻塞队列:ConcurrentLinkedQueue(无界线程安全),采用CAS机制(compareAndSwapObject原子操作)。 阻塞队列:ArrayBlockingQueue(有界...
java bitset源码 目前进度(171/237) LeetCode做题笔记 Add two numbers:给定一个数集合和一个数,已知集合中有两个数的和是给定数,求这两个加数的index 方法1:暴力,n^2时间复杂度,不推荐 方法2:快速排序nlogn...
bitset源码Java 这是 Java Bitset 类的字对齐压缩变体。 我们提供 64 位和 32 位类似 RLE 的压缩方案。 它可用于实现位图索引。 它所依赖的 EWAH 格式用于运行 GitHub 的 git 实现。 字对齐压缩的目标不是实现最佳...
Java的BitSet是一个实用工具类,它提供了位操作的功能,常用于存储一组可变的布尔值。在多线程并发环境中,对BitSet的操作需要特别注意,因为位操作本身是原子性的,但BitSet的大部分方法并不是线程安全的。这篇博文...
bitset 源码 对于Java开发者来说,Java8的版本显然是一个具有里程碑意义的版本,蕴含了许多令人激动的新特性,如果能利用好这些新特性,能够大大提升我们的开发效率。Java8的函数式编程能够大大减少代码量和便于维护...
在标题提及的 "javabitset源码-montysolr:Solr天体物理数据系统" 中,我们可以推测这个项目可能是在Solr(一个流行的全文搜索引擎)中使用BitSet来处理天体物理数据。下面我们将深入探讨Java BitSet以及它如何应用于...
bitset 源码 all-kinds-book 主要包含 java 大数据 数据仓库 数据分析 第三方组件 面试题 数据结构与算法 设计模式 软件设计 等文档 ,可以访问我们的官网查看更多内容 [人在地上跑 牛在天上飞](#人在地上跑 牛在...
java bitset源码 Study 少有人走的路 数据结构 队列 集合 链表、数组 字典、关联数组 栈 树 二叉树 完全二叉树 平衡二叉树 二叉查找树(BST) 红黑树 B,B+,B*树 LSM 树 BitSet 常用算法 计数排序 桶排序 基数排序 ...
java bitset 源码 redis-bloomFilter redis-bloomFilter是基于redis的bitset实现的bloomfilter.具体原理和实现思路可以参考 使用 redis-bloomFilter发布在JitPack,可以选择下载源码编译,或者通过jitpack源添加依赖...
bitset源码 这个仓库主要放一些 Demo 示例 目录 1. Kotlin 实现 IGetInt java 接口的方法示例: public class IGetInt { String get(int i); String get(Integer i); } 2. Java 并发示例 此部分Demo基本用于实现 《》...
bitset源码 JAVA 源码研究 使用版本 [jdk-8u211] [环境 IDEA] 构建步骤 1、创建项目结构 rt/ // rt.jar 反编译源码 rtsrc/ // JDK 源码 src/ // 项目源码 2、导入源码 import jdk source of src.zip import jdk ...
bitset 源码 后端开发者知识图谱 大体了解,按需精通 语言 PHP Laravel JAVA Go JavaScript(TypeScript) Python 服务器脚本、科学计算、机器学习 C、C++ 其他语言 Ruby、LUA、Swift、OC、Kotlin、Rust、Scala、R ...
bitset源码CSharpEWAH 这是标准位数组类的压缩变体。 它使用类似 64 位 RLE 的压缩方案。 它可用于实现位图索引。 字对齐压缩的目标不是实现最佳压缩,而是提高查询处理时间。 因此,我们尝试节省 CPU 周期,可能以...
bitset源码 Learn JDK 8 学习 JDK 8 源码设计。 阅读前的准备 下载 jdk1.8.0_211,将其中的 src.zip 文件解压。解压后目录如下(部分已省略): └─src └─java ├─io ├─lang ├─math ├─net ├─nio ├─...
java bitset 源码 simple-php-github-toc A simple script to create github toc 生成 Github Readme 文件 TOC 目录 的简单脚本 Usage - 用法 $ wget ...
java bitset源码 Awesome Go 中文翻译 awesome Go项目的中文翻译,原文请点击 . 贡献 首先请看一下这个 。同时感谢这些 。 you rock! 如果你看到下面的某个项目已经不再被支持或者并不适用,请提交一个pull request...
基于JDK1.8的BitSet 源码分析, 描述了实现的原理 个方法的含义 虽然没有写出实际的测试代码 但是只要是细度了我的这个分析 在使用的时候就不是问题了