`
lxz891117
  • 浏览: 33333 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Java BitSet

 
阅读更多

所用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 源码解析.rtf

    java bitset 高级数据结构 源码解析 适合 0-3 年开发人员,进阶、面试必备知识!

    浅谈Java BitSet使用场景和代码示例

    Java BitSet 使用场景和代码示例 Java BitSet 是 Java 中的一个重要类,它实现了一个按需增长的位向量。BitSet 的每一个组件都有一个 boolean 值,用非负的整数将 BitSet 的位编入索引。可以对每个编入索引的位进行...

    javabitset源码-JerrySoundCode:杰瑞声码

    bitset源码Java源码分析 基础集合列表 ArrayList (done) Vector (done) LinkedList (done) Stack (done) ReferenceQueue (done) ArrayDeque (done) Set HashSet (done) TreeSet (done) LinkedHashSet (done) BitSet ...

    javabitset源码-java_master:后端架构师技术图谱

    java bitset 源码 最后更新于20180424 (Toc generated by ) 数据结构 队列 非阻塞队列:ConcurrentLinkedQueue(无界线程安全),采用CAS机制(compareAndSwapObject原子操作)。 阻塞队列:ArrayBlockingQueue(有界...

    javabitset源码-myleetcode:所有LeetCode问题的记录

    java bitset源码 目前进度(171/237) LeetCode做题笔记 Add two numbers:给定一个数集合和一个数,已知集合中有两个数的和是给定数,求这两个加数的index 方法1:暴力,n^2时间复杂度,不推荐 方法2:快速排序nlogn...

    javabitset源码-javaewah:JavaBitSet类的压缩替代品

    bitset源码Java 这是 Java Bitset 类的字对齐压缩变体。 我们提供 64 位和 32 位类似 RLE 的压缩方案。 它可用于实现位图索引。 它所依赖的 EWAH 格式用于运行 GitHub 的 git 实现。 字对齐压缩的目标不是实现最佳...

    对java的BitSet的多线程并发的探索

    Java的BitSet是一个实用工具类,它提供了位操作的功能,常用于存储一组可变的布尔值。在多线程并发环境中,对BitSet的操作需要特别注意,因为位操作本身是原子性的,但BitSet的大部分方法并不是线程安全的。这篇博文...

    javabitset源码-Java8-learning:学习Java8新特性

    bitset 源码 对于Java开发者来说,Java8的版本显然是一个具有里程碑意义的版本,蕴含了许多令人激动的新特性,如果能利用好这些新特性,能够大大提升我们的开发效率。Java8的函数式编程能够大大减少代码量和便于维护...

    javabitset源码-montysolr:Solr天体物理数据系统

    在标题提及的 "javabitset源码-montysolr:Solr天体物理数据系统" 中,我们可以推测这个项目可能是在Solr(一个流行的全文搜索引擎)中使用BitSet来处理天体物理数据。下面我们将深入探讨Java BitSet以及它如何应用于...

    javabitset源码-all-kinds-book:java大数据sparkflinkredishivehbasekafka面试题数据结构

    bitset 源码 all-kinds-book 主要包含 java 大数据 数据仓库 数据分析 第三方组件 面试题 数据结构与算法 设计模式 软件设计 等文档 ,可以访问我们的官网查看更多内容 [人在地上跑 牛在天上飞](#人在地上跑 牛在...

    javabitset源码-Study:学习

    java bitset源码 Study 少有人走的路 数据结构 队列 集合 链表、数组 字典、关联数组 栈 树 二叉树 完全二叉树 平衡二叉树 二叉查找树(BST) 红黑树 B,B+,B*树 LSM 树 BitSet 常用算法 计数排序 桶排序 基数排序 ...

    javabitset源码-redis-bloomfilter:基于Redis的BloomfilterforJava

    java bitset 源码 redis-bloomFilter redis-bloomFilter是基于redis的bitset实现的bloomfilter.具体原理和实现思路可以参考 使用 redis-bloomFilter发布在JitPack,可以选择下载源码编译,或者通过jitpack源添加依赖...

    javabitset源码-my-jvm-demos:Java/Kotlin演示

    bitset源码 这个仓库主要放一些 Demo 示例 目录 1. Kotlin 实现 IGetInt java 接口的方法示例: public class IGetInt { String get(int i); String get(Integer i); } 2. Java 并发示例 此部分Demo基本用于实现 《》...

    javabitset源码-source-code-jdk-8u211:源代码-jdk-8u211

    bitset源码 JAVA 源码研究 使用版本 [jdk-8u211] [环境 IDEA] 构建步骤 1、创建项目结构 rt/ // rt.jar 反编译源码 rtsrc/ // JDK 源码 src/ // 项目源码 2、导入源码 import jdk source of src.zip import jdk ...

    javabitset源码-developer-knowledge-map:后端开发人员知识图谱

    bitset 源码 后端开发者知识图谱 大体了解,按需精通 语言 PHP Laravel JAVA Go JavaScript(TypeScript) Python 服务器脚本、科学计算、机器学习 C、C++ 其他语言 Ruby、LUA、Swift、OC、Kotlin、Rust、Scala、R ...

    javabitset源码-csharpewah:C#中的压缩位图

    bitset源码CSharpEWAH 这是标准位数组类的压缩变体。 它使用类似 64 位 RLE 的压缩方案。 它可用于实现位图索引。 字对齐压缩的目标不是实现最佳压缩,而是提高查询处理时间。 因此,我们尝试节省 CPU 周期,可能以...

    javabitset源码-read-jdk8:阅读JDK8源码,写一些解释

    bitset源码 Learn JDK 8 学习 JDK 8 源码设计。 阅读前的准备 下载 jdk1.8.0_211,将其中的 src.zip 文件解压。解压后目录如下(部分已省略): └─src └─java ├─io ├─lang ├─math ├─net ├─nio ├─...

    javabitset源码-simple-php-github-toc:一个简单的脚本来创建githubtoc

    java bitset 源码 simple-php-github-toc A simple script to create github toc 生成 Github Readme 文件 TOC 目录 的简单脚本 Usage - 用法 $ wget ...

    javabitset源码-awesome-go-cn:AwesomeGo项目的中文翻译

    java bitset源码 Awesome Go 中文翻译 awesome Go项目的中文翻译,原文请点击 . 贡献 首先请看一下这个 。同时感谢这些 。 you rock! 如果你看到下面的某个项目已经不再被支持或者并不适用,请提交一个pull request...

    BitSet 源码分析.txt

    基于JDK1.8的BitSet 源码分析, 描述了实现的原理 个方法的含义 虽然没有写出实际的测试代码 但是只要是细度了我的这个分析 在使用的时候就不是问题了

Global site tag (gtag.js) - Google Analytics