java bitset类_java.util.BitSet-java中的位图类

1. 构造方法和汇总统计方法

public static void main(String[] args) {

java.util.BitSet bitSet = new BitSet();

System.out.println(bitSet.size()); // 64

bitSet.set(9);

System.out.println(bitSet.length()); // 9+1=10

java.util.BitSet bitSetNbit = new BitSet(1024);

System.out.println(bitSetNbit.size()); // 1024

System.out.println(bitSetNbit.length()); // 0

System.out.println(bitSet.isEmpty()); // true

}

构造方法

public BitSet()

创建一个新的 BitSet: 所有的位初始均为 false/0。

public BitSet(int nbits)

创建一个 BitSet,初始大小足以显式表示索引范围在 0 到 nbits-1 的位。

所有的位初始均为 false/0

汇总统计 size/length/isEmpty/cardinality

int size()

返回此 BitSet 实际使用空间的位数:nbits

int length()

返回此 BitSet 的"true"的位数:BitSet 中最高设置位的索引加 1。

boolean isEmpty()

如果此 BitSet 中没有包含任何设置为 true 的位,则返回 ture。

int cardinality()

返回此 BitSet 中设置为 true 的位数。

2. 增删改查

增 - set

public static void main(String[] args) {

BitSet bitSet = new BitSet(1024);

bitSet.set(0); // 索引0的bit位, 设置 true :[0]=1

bitSet.set(2); // 索引2的bit位, 设置 true :[2]=1

bitSet.set(4, true); // 同上,索引 4 = true :[4]=1

bitSet.set(5, 7); // [5, 7) 设置 true [5] = 1; [6] = 1

bitSet.set(11, 12, false); // 索引区间[11, 12)置 false: [11] = false

// `toString` 输出索引位为 true 的元素的索引列表; 注意是{}不是[]

System.out.println(bitSet.toString()); // {0, 2, 4, 5, 6}

// `size` 初始化的总bitmap -size 的大小

System.out.println(bitSet.size()); // 1024

// `length` 注意len=7=> max(true-index + 1) ==>

// 在IO多路复用的select函数里有与此相同的应用,

// 遍历时, 就不用考虑[7, size()]z这些了

System.out.println(bitSet.length()); // 7

// `cardinality` true的元素的个数- true-count

System.out.println(bitSet.cardinality()); // 5

}

void set(int bitIndex)

将指定索引 bitIndex 处的位设置为 true。

void set(int bitIndex, boolean value)

将指定索引 bitIndex 处的位设置为指定的值 value。

void set(int fromIndex, int toIndex)

将指定的 fromIndex(包括)到 toIndex(不包括)范围内的位设置为 true。

void set(int fromIndex, int toIndex, boolean value)

将指定的 fromIndex(包括)到指定的 toIndex(不包括)范围内的位设置为 value。

删 - clear

public static void main(String[] args) {

BitSet bitSet = new BitSet(1024);

bitSet.set(0); // 索引0的bit位, 设置 true :[0]=1

bitSet.set(2); // 索引2的bit位, 设置 true :[2]=1

bitSet.set(4, true); // 同上,索引 4 = true :[4]=1

bitSet.set(5, 7); // [5, 7) 设置 true [5] = 1; [6] = 1

bitSet.set(11, 12, false); // 索引区间[11, 12)置 false: [11] = false

bitSet.clear(2); // [2] = false

bitSet.clear(4, 6); // [4] = false; [5] = false

// `toString` 输出索引位为 true 的元素的索引列表; 注意是{}不是[]

System.out.println(bitSet.toString()); // {0, 6}

// `size` 初始化的总bitmap -size 的大小

System.out.println(bitSet.size()); // 1024

// `length` 注意len=7=> max(true-index + 1) ==>

// 在IO多路复用的select函数里有与此相同的应用,

// 遍历时, 就不用考虑[7, size()]z这些了

System.out.println(bitSet.length()); // 7

// `cardinality` true的元素的个数- true-count

System.out.println(bitSet.cardinality()); // 2

}

void clear()

将此 BitSet 中的所有位设置为 false。

void clear(int bitIndex)

将索引指定处的位设置为 false。

void clear(int fromIndex, int toIndex)

将指定的 fromIndex(包括)到指定的 toIndex(不包括)范围内的位设置为 false。

改 - flip

public static void main(String[] args) {

BitSet bitSet = new BitSet(1024);

bitSet.set(0); // 索引0的bit位, 设置 true :[0]=1

bitSet.set(2); // 索引2的bit位, 设置 true :[2]=1

bitSet.set(4, true); // 同上,索引 4 = true :[4]=1

bitSet.set(5, 7); // [5, 7) 设置 true [5] = 1; [6] = 1

bitSet.set(11, 12, false); // 索引区间[11, 12)置 false: [11] = false

bitSet.clear(2); // [2] = false

bitSet.flip(2); // 相当于clear的反操作

bitSet.clear(4, 6); // [4] = false; [5] = false

bitSet.flip(4, 6); // 相当于clear的反操作

// `toString` 输出索引位为 true 的元素的索引列表; 注意是{}不是[]

System.out.println(bitSet.toString()); // {0, 2, 4, 5, 6}

// `size` 初始化的总bitmap -size 的大小

System.out.println(bitSet.size()); // 1024

// `length` 注意len=7=> max(true-index + 1) ==>

// 在IO多路复用的select函数里有与此相同的应用,

// 遍历时, 就不用考虑[7, size()]z这些了

System.out.println(bitSet.length()); // 7

// `cardinality` true的元素的个数- true-count

System.out.println(bitSet.cardinality()); // 5

}

void flip(int bitIndex)

将指定索引处的位设置为其当前值的补码。

void flip(int fromIndex, int toIndex)

将指定的 fromIndex(包括)到指定的 toIndex(不包括)范围内的每个位设置为其当前值的补码。

查: get/nextClearBit/nextSetBit/toString/cardinality

public static void main(String[] args) {

BitSet bitSet = new BitSet(1024);

bitSet.set(0); // 索引0的bit位, 设置 true :[0]=1

bitSet.set(2); // 索引2的bit位, 设置 true :[2]=1

bitSet.set(6, true); // 同上,索引 4 = true :[4]=1

System.out.println(bitSet.nextClearBit(2)); // 3 [2]开始的第一个false的索引(包括2)=>3

System.out.println(bitSet.nextSetBit(2)); // 2 [2]开始的第一个true的索引(包括2)=>2

System.out.println(bitSet.get(2)); // true

System.out.println(bitSet.get(3)); // false

System.out.println(bitSet.get(3, 7)); // {3} 返回了一个新的BitSet, 新的索引从第一个开始[from, to)

}

int nextClearBit(int fromIndex)

返回第一个设置为 false 的位的索引,在fromIndex起(包含)的索引上。

int nextSetBit(int fromIndex)

返回第一个设置为 true 的位的索引,在fromIndex起(包含)的索引上。

boolean get(int bitIndex)

返回指定索引处的位值。

String toString()

返回此位 set 的字符串表示形式。

// {2, 4, 10, 99}

3. BitSet 之:集合操作:与或非异或

void and(BitSet set)

对此目标位 set 和参数位 set 执行逻辑与操作。

void andNot(BitSet set)

清除此 BitSet 中所有的位,其相应的位在指定的 BitSet 中已设置。

boolean intersects(BitSet set)

如果指定的 BitSet 中有设置为 true 的位,并且在此 BitSet 中也将其设置为 true,则返回 ture。

void or(BitSet set)

对此位 set 和位 set 参数执行逻辑或操作。

void xor(BitSet set)

对此位 set 和位 set 参数执行逻辑异或操作。

boolean equals(Object obj) // 比较两个BitSet:里面所有位的true比较

---[2020.04.01 18:12:13]---

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值