Java教程
+ -

Java Bitset类

2019-09-09 5 0

一个Bitset类创建一种特殊类型的数组来保存位值。BitSet中数组大小会随需要增加。这和位向量(vector of bits)比较类似。

这是一个传统的类,但它在Java 2中被完全重新设计。

BitSet定义了两个构造方法。

第一个构造方法创建一个默认的对象:

BitSet()

第二个方法允许用户指定初始大小。所有位初始化为0。

BitSet(int size)

BitSet中实现了Cloneable接口中定义的方法如下表所列:

序号 方法描述
1 void and(BitSet set) 对此目标位 set 和参数位 set 执行逻辑与操作。
2 void andNot(BitSet set) 清除此 BitSet 中所有的位,其相应的位在指定的 BitSet 中已设置。
3 int cardinality( ) 返回此 BitSet 中设置为 true 的位数。
4 void clear( ) 将此 BitSet 中的所有位设置为 false。
5 void clear(int index) 将索引指定处的位设置为 false。
6 void clear(int startIndex, int endIndex) 将指定的 fromIndex(包括)到指定的 toIndex(不包括)范围内的位设置为 false。
7 Object clone( ) 复制此 BitSet,生成一个与之相等的新 BitSet。
8 boolean equals(Object bitSet) 将此对象与指定的对象进行比较。
9 void flip(int index) 将指定索引处的位设置为其当前值的补码。
10 void flip(int startIndex, int endIndex) 将指定的 fromIndex(包括)到指定的 toIndex(不包括)范围内的每个位设置为其当前值的补码。
11 boolean get(int index) 返回指定索引处的位值。
12 BitSet get(int startIndex, int endIndex) 返回一个新的 BitSet,它由此 BitSet 中从 fromIndex(包括)到 toIndex(不包括)范围内的位组成。
13 int hashCode( ) 返回此位 set 的哈希码值。
14 boolean intersects(BitSet bitSet) 如果指定的 BitSet 中有设置为 true 的位,并且在此 BitSet 中也将其设置为 true,则返回 true。
15 boolean isEmpty( ) 如果此 BitSet 中没有包含任何设置为 true 的位,则返回 true。
16 int length( ) 返回此 BitSet 的”逻辑大小”:BitSet 中最高设置位的索引加 1。
17 int nextClearBit(int startIndex) 返回第一个设置为 false 的位的索引,这发生在指定的起始索引或之后的索引上。
18 int nextSetBit(int startIndex) 返回第一个设置为 true 的位的索引,这发生在指定的起始索引或之后的索引上。
19 void or(BitSet bitSet) 对此位 set 和位 set 参数执行逻辑或操作。
20 void set(int index) 将指定索引处的位设置为 true。
21 void set(int index, boolean v) 将指定索引处的位设置为指定的值。
22 void set(int startIndex, int endIndex) 将指定的 fromIndex(包括)到指定的 toIndex(不包括)范围内的位设置为 true。
23 void set(int startIndex, int endIndex, boolean v) 将指定的 fromIndex(包括)到指定的 toIndex(不包括)范围内的位设置为指定的值。
24 int size( ) 返回此 BitSet 表示位值时实际使用空间的位数。
25 String toString( ) 返回此位 set 的字符串表示形式。
26 void xor(BitSet bitSet) 对此位 set 和位 set 参数执行逻辑异或操作。

实例

下面的程序说明这个数据结构支持的几个方法:

实例

import java.util.BitSet;
public class BitSetDemo {
  public static void main(String args[]) {
     BitSet bits1 = new BitSet(16);
     BitSet bits2 = new BitSet(16);
     // set some bits
     for(int i=0; i<16; i++) {
        if((i%2) == 0) bits1.set(i);
        if((i%5) != 0) bits2.set(i);
     }
     System.out.println("Initial pattern in bits1: ");
     System.out.println(bits1);
     System.out.println("\nInitial pattern in bits2: ");
     System.out.println(bits2);
     // AND bits
     bits2.and(bits1);
     System.out.println("\nbits2 AND bits1: ");
     System.out.println(bits2);
     // OR bits
     bits2.or(bits1);
     System.out.println("\nbits2 OR bits1: ");
     System.out.println(bits2);
     // XOR bits
     bits2.xor(bits1);
     System.out.println("\nbits2 XOR bits1: ");
     System.out.println(bits2);
  }
}

以上实例编译运行结果如下:

Initial pattern in bits1:
{0, 2, 4, 6, 8, 10, 12, 14}
Initial pattern in bits2:
{1, 2, 3, 4, 6, 7, 8, 9, 11, 12, 13, 14}
bits2 AND bits1:
{2, 4, 6, 8, 12, 14}
bits2 OR bits1:
{0, 2, 4, 6, 8, 10, 12, 14}
bits2 XOR bits1:
{}

0 篇笔记 写笔记

SQLite 数据插入insert into
和常用数据库一致,SQLite也提供insert SQL语句用于向数据库的表中添加新的数据记录。语法INSERT INTO table_name [(col_name1,col_name2,...col_nameN)]values (value1,value2,...,value2),.........
C# 索引器(Indexer)
索引器(Indexer) 允许一个对象可以像数组一样被索引。当您为类定义一个索引器时,该类的行为就会像一个 虚 拟数组(virtualarray) 一样。您可以使用数组访问运算符([ ])来访问该类的实例。语法一维索引器的语法如下:element-type this[int index] { /......
MongoDB 覆盖索引查询
官方的MongoDB的文档中说明,覆盖查询是以下的查询:所有的查询字段是索引的一部分所有的查询返回字段在同一个索引中由于所有出现在查询中的字段是索引的一部分, MongoDB 无需在整个数据文档中检索匹配查询条件和返回使用相同索引的查询结果。因为索引存在于RAM中,从索引中获取数据比通过扫描文档读取......
SQL INSERT INTO
INSERT INTO 语句用于向表格中插入新的行。语法INSERT INTO 表名称 VALUES (值1, 值2,....)我们也可以指定所要插入数据的列:INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)插入新的行“Persons”......
Redis SETRANGE key offset value
Redis SETRANGE 命令用于覆盖从指定偏移量开始的键处的字符串的一部分。SETRANGE - 返回值整数回复,由命令修改后的字符串长度。SETRANGE - 语法以下是Redis SETRANGE 命令的基本语法。redis 127.0.0.1:6379> SETRANGE KEY_......
Java rint() 方法
rint() 方法返回最接近参数的整数值。语法该方法有以下几种语法格式:double rint(double d)参数double 原始数据类型。返回值返回 double 类型数组,是最接近参数的整数值。实例实例public class Test{ public static void mai......
Python3 集合Set intersection_update()方法
intersection_update() 方法用于移除两个或更多集合中都不重叠的元素,即计算交集。intersection_update() 方法不同于 intersection() 方法,因为 intersection()方法是返回一个新的集合,而intersection_update() 方法......
Redis SET key
Redis SET 命令用于在Redis键中设置一些字符串值。SET - 返回值简单的字符串值。SET - 语法以下是Redis SET 命令的基本语法。redis 127.0.0.1:6379> SET KEY_NAME VALUESET - 示例redis 127.0.0.1:6379&g......
Java subSequence() 方法
subSequence() 方法返回一个新的字符序列,它是此序列的一个子序列。语法public CharSequence subSequence(int beginIndex, int endIndex)参数beginIndex -- 起始索引(包括)。endIndex -- 结束索引(不包括)。返......
Java intern() 方法
intern() 方法返回字符串对象的规范化表示形式。它遵循以下规则:对于任意两个字符串 s 和 t,当且仅当 s.equals(t) 为 true 时,s.intern() == t.intern() 才为 true。语法public String intern()参数无返回值一个字符串,内容与此......
Java compareToIgnoreCase() 方法
compareToIgnoreCase() 方法用于按字典顺序比较两个字符串,不考虑大小写。语法int compareToIgnoreCase(String str)参数str -- 要比较的字符串。返回值如果参数字符串等于此字符串,则返回值 0;如果此字符串小于字符串参数,则返回一个小于 0 的值......
MongoDB 索引限制
额外开销每个索引占据一定的存储空间,在进行插入,更新和删除操作时也需要对索引进行操作。所以,如果你很少对集合进行读取操作,建议不使用索引。内存(RAM)使用由于索引是存储在内存(RAM)中,你应该确保该索引的大小不超过内存的限制。如果索引的大小大于内存的限制,MongoDB会删除一些索引,这将导致性......
Java round() 方法
round() 方法返回一个最接近的int、long型值。语法该方法有以下几种语法格式:long round(double d)int round(float f)参数d -- double 或 float 的原生数据类型f -- float 原生数据类型返回值返回一个最接近的int、long型值,......
GO语言 范围(Range)
Go 语言中 range 关键字用于 for循环中迭代数组(array)、切片(slice)、通道(channel)或集合(map)的元素。在数组和切片中它返回元素的索引索引对应的值,在集合中返回key-value 对的 key 值。实例package mainimport "fmt&q......
Redis CONFIG Set 命令
Redis CONFIG Set 命令用于在运行时重新配置服务器,而无需重新启动Redis。CONFIG SET - 语法以下是Redis CONFIG Set 命令的基本语法。redis 127.0.0.1:6379> CONFIG Set parameter valueCONFIG SET......
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!