(1)BitSet类
大小可动态改变, 取值为true或false的位集合。用于表示一组布尔标志。
此类实现了一个按需增长的位向量。位 set 的每个组件都有一个 boolean 值。用非负的整数将 BitSet 的位编入索引。可以对每个编入索引的位进行测试、设置或者清除。通过逻辑与、逻辑或和逻辑异或操作,可以使用一个 BitSet 修改另一个 BitSet 的内容。
默认情况下,set 中所有位的初始值都是 false。
每个位 set 都有一个当前大小,也就是该位 set 当前所用空间的位数。注意,这个大小与位 set 的实现有关,所以它可能随实现的不同而更改。位 set 的长度与位 set 的逻辑长度有关,并且是与实现无关而定义的。
除非另行说明,否则将 null 参数传递给 BitSet 中的任何方法都将导致 NullPointerException。 在没有外部同步的情况下,多个线程操作一个 BitSet 是不安全的。
(2) 构造函数: BitSet() or BitSet(int nbits)
(3) 一些方法
public void set(int pos): 位置pos的字位设置为true。
public void set(int bitIndex, boolean value) 将指定索引处的位设置为指定的值。
public void clear(int pos): 位置pos的字位设置为false。
public void clear() : 将此 BitSet 中的所有位设置为 false。
public int cardinality() 返回此 BitSet 中设置为 true 的位数。
public boolean get(int pos): 返回位置是pos的字位值。
public void and(BitSet other): other同该字位集进行与操作,结果作为该字位集的新值。
public void or(BitSet other): other同该字位集进行或操作,结果作为该字位集的新值。
public void xor(BitSet other): other同该字位集进行异或操作,结果作为该字位集的新值。
public void andNot(BitSet set) 清除此 BitSet 中所有的位,set - 用来屏蔽此 BitSet 的 BitSet
public int size(): 返回此 BitSet 表示位值时实际使用空间的位数。
public int length() 返回此 BitSet 的“逻辑大小”:BitSet 中最高设置位的索引加 1。
public int hashCode(): 返回该集合Hash 码, 这个码同集合中的字位值有关。
public boolean equals(Object other): 如果other中的字位同集合中的字位相同,返回true。
public Object clone() 克隆此 BitSet,生成一个与之相等的新 BitSet。
public String toString() 返回此位 set 的字符串表示形式。
例1:标明一个字符串中用了哪些字符
import java.util.BitSet;
public class WhichChars{
private BitSet used = new BitSet();
public WhichChars(String str){
for(int i=0;i< str.length();i++)
used.set(str.charAt(i)); // set bit for char
}
public String toString(){
String desc="[";
int size=used.size();
for(int i=0;i< size;i++){
if(used.get(i))
desc+=(char)i;
}
return desc+"]";
}
public static void main(String args[]){
WhichChars w=new WhichChars("How do you do");
System.out.println(w);
}
}运行:
C:\work>java WhichChars
[ Hdouwy]
例2:筛选法求素数
import java.util.*;
public class BitSetTest{
public static void main(String[] args){
BitSet sieve=new BitSet(1024);
int size=sieve.size();
for(int i=2;i< size;i++)
sieve.set(i);
int finalBit=(int)Math.sqrt(sieve.size());
for(int i=2;i< finalBit;i++)
if(sieve.get(i))
for(int j=2*i;j< size;j+=i)
sieve.clear(j);
int counter=0;
for(int i=1;i< size;i++){
if(sieve.get(i)){
System.out.printf("%5d",i);
if(++counter%15==0)
System.out.println();
}
}
}
}
C:\work>java BitSetTest
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47
53 59 61 67 71 73 79 83 89 97 101 103 107 109 113
127 131 137 139 149 151 157 163 167 173 179 181 191 193 197
199 211 223 227 229 233 239 241 251 257 263 269 271 277 281
283 293 307 311 313 317 331 337 347 349 353 359 367 373 379
383 389 397 401 409 419 421 431 433 439 443 449 457 461 463
467 479 487 491 499 503 509 521 523 541 547 557 563 569 571
577 587 593 599 601 607 613 617 619 631 641 643 647 653 659
661 673 677 683 691 701 709 719 727 733 739 743 751 757 761
769 773 787 797 809 811 821 823 827 829 839 853 857 859 863
877 881 883 887 907 911 919 929 937 941 947 953 967 971 977
983 991 997 1009 1013 1019 1021
例3:简单使用
import java.util.BitSet;
public class BitOHoney {
public static void main(String args[]) {
String names[] = { "Java", "Source", "and", "Support"};
BitSet bits = new BitSet();
for (int i = 0, n = names.length; i < n; i++) {
if ((names[i].length() % 2) == 0) {
bits.set(i);
}
}
System.out.println(bits);
System.out.println("Size : " + bits.size());
System.out.println("Length: " + bits.length());
for (int i = 0, n = names.length; i < n; i++) {
if (!bits.get(i)) {
System.out.println(names[i] + " is odd");
}
}
BitSet bites = new BitSet();
bites.set(0);
bites.set(1);
bites.set(2);
bites.set(3);
bites.andNot(bits);
System.out.println(bites);
}
}运行:
C:\work>java BitOHoney
{0, 1}
Size : 64
Length: 2
and is odd
Support is odd
{2, 3}
相关推荐
Java中BitSet类是Java集合框架的一部分,它是一种用于处理位操作的高级数据结构。BitSet可以看作是一个只存储布尔值的数组,但相比于原始的布尔数组,BitSet更加内存高效,因为它以64位的块(word)来存储多个布尔值...
在Java8之前,接口中只能包含抽象方法。那么这有什么样弊端呢?比如,想再Collection接口中添加一个spliterator抽象方法,那么也就意味着之前所有实现Collection接口的实现类,都要重新实现spliterator这个方法才行...
Java中的锁和同步类 公平锁 & 非公平锁 悲观锁 乐观锁 & CAS ABA 问题 CopyOnWrite容器 RingBuffer 可重入锁 & 不可重入锁 互斥锁 & 共享锁 死锁 操作系统 计算机原理 CPU 多级缓存 进程 线程 协程 Linux 设计模式 ...
在标题提及的 "javabitset源码-montysolr:Solr天体物理数据系统" 中,我们可以推测这个项目可能是在Solr(一个流行的全文搜索引擎)中使用BitSet来处理天体物理数据。下面我们将深入探讨Java BitSet以及它如何应用于...
【Java海量数据处理BitSet】 在Java编程中,处理...以上就是关于Java海量数据处理BitSet以及相关技术的知识点介绍,希望对你的学习有所帮助。理解并熟练运用这些工具和技术,能让你在处理大数据问题时更加得心应手。
JAVA SE学习精华集锦 Java SE(Java Standard Edition)是Java平台的核心部分,它提供了用于开发和部署桌面、服务器以及嵌入式应用的基础工具和框架。以下是对标题和描述中涉及的一些关键知识点的详细说明: 1. **...
总之,"明华读卡器Java例程"是一个涵盖硬件接口、通信协议、数据处理等多个IT领域的实践案例,通过学习和理解这个例程,开发者不仅可以掌握与读卡器的交互,还能深化对Java编程和嵌入式系统开发的理解。
在学习Java的过程中,了解和掌握这两部分的内容是基础,也是进阶的关键。`java.util`包的集合框架是理解和使用Java面向对象编程的重要一环,而`java.io`包则涉及程序与外部世界交互的基本方式,对于处理文件、网络...
java bitset源码 Awesome Go 中文翻译 awesome Go项目的中文翻译,原文请点击 . 贡献 首先请看一下这个 。同时感谢这些 。 you rock! 如果你看到下面的某个项目已经不再被支持或者并不适用,请提交一个pull request...
在Java中,我们可以通过`BitSet`类来处理比特位,并用循环和位操作实现LFSR。 ```java public class LFSR { private BitSet register; private int feedback; public LFSR(int seed) { register = new BitSet...
2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 7. 多媒体CD-ROM 8. 源代码 9. 编码样式 10. Java版本 11. 课程和培训 12. 错误 13. 封面设计 14. 致谢 第1章 对象入门 1.1 抽象的进步 1.2 对象的接口 1.3 ...
bitset 源码 后端开发者知识图谱 大体了解,按需精通 语言 PHP Laravel JAVA Go JavaScript(TypeScript) Python 服务器脚本、科学计算、机器学习 C、C++ 其他语言 Ruby、LUA、Swift、OC、Kotlin、Rust、Scala、R ...
2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 7. 多媒体CD-ROM 8. 源代码 9. 编码样式 10. Java版本 11. 课程和培训 12. 错误 13. 封面设计 14. 致谢 第1章 对象入门 1.1 抽象的进步 1.2 对象的接口 1.3 ...
**1.5 J2SE学习中的30个基本概念** - **基本概念介绍** - 如类、对象、方法、构造器等。 **1.6 Java线程** - **线程基础知识** - Java 线程模型、线程生命周期、线程同步等。 **1.7 Java 5.0多线程编程** - *...
bitset源码 Learn JDK 8 学习 JDK 8 源码设计。 阅读前的准备 下载 jdk1.8.0_211,将其中的 src.zip 文件解压。解压后目录如下(部分已省略): └─src └─java ├─io ├─lang ├─math ├─net ├─nio ├─...
在Java中实现Aproiori算法,我们可以利用其核心思想,即通过迭代的方式找到所有满足最小支持度阈值的项集。 首先,我们来理解Aproiori算法的基本步骤: 1. **生成项集**:从原始数据集中提取不重复的项,形成项集...
在Java中实现这个过程,需要考虑性能优化,例如使用BitSet或HashSet等高效数据结构来存储项集和候选集,减少不必要的遍历操作。同时,通过并行化处理或多线程技术,可以加速算法的执行。 在给定的文件"apriori"中,...
总之,这个压缩包提供的代码示例展示了如何在Java环境中实现CRC循环冗余校验,这对于理解CRC原理和学习数据校验技术具有很好的实践价值。通过阅读和理解这两份源代码,开发者可以进一步提升自己的数据处理和错误检测...
在Java中,通常使用BitSet或自定义数据结构来存储和管理位,然后将其写入OutputStream,如FileOutputStream。 5. **BitInputStream.java**:与BitOutputStream相对应,这个类负责读取位流并进行解码。它可能需要...