相关博客
https://blog.csdn.net/weixin_43067762/article/details/105637469
https://my.oschina.net/cloudcoder/blog/294810
自己整理的api
package com.crayon2f.algorithm.bit;
import org.junit.Test;
import java.util.BitSet;
/**
* Created by feifan.gou@gmail.com on 2021/7/28 18:09.
*/
public class BitSetLearn {
@Test
//设置方法
public void set() {
BitSet bitSet = new BitSet();
//设置某个值为true(有)
bitSet.set(1); //{1}
//设置一个范围为true
bitSet.set(1, 10); //{1, 2, 3, 4, 5, 6, 7, 8, 9}
//设置一个值为boolean
bitSet.set(1, false); //{2, 3, 4, 5, 6, 7, 8, 9}
//设置一个范围为boolean
bitSet.set(1, 10, false);//{}
}
@Test
public void get() {
//
BitSet bitSet = new BitSet();
bitSet.set(1, 11); //{1,2,3,4,5,6,7,8,9,10}
//获取指定索引是否有值
System.out.println(bitSet.get(2));
//获取范围
BitSet bitSet1 = bitSet.get(0, 2);
System.out.println(bitSet1.get(3));
}
@Test
public void clear() {
BitSet bitSet = new BitSet();
bitSet.set(1, 11); //{1,2,3,4,5,6,7,8,9,10}
//去除指定位置
bitSet.clear(2);
//去除范围
bitSet.clear(3,6);
//去除所有
// bitSet.clear();
}
@Test
public void search() {
BitSet bitSet = new BitSet();
bitSet.set(1, 11); //{1,2,3,4,5,6,7,8,9,10}
//从X开始查找下一个为false的位置
System.out.println(bitSet.nextClearBit(5)); // 11
//从X开始查找上一个为false的位置
System.out.println(bitSet.previousClearBit(5)); //0
bitSet.clear();
bitSet.set(2,5); //{2,3,4}
bitSet.set(6,10); //{2,3,4,6,7,8,9}
//从X开始下一个为true的位置
System.out.println(bitSet.nextSetBit(0)); //2
System.out.println(bitSet.nextSetBit(5)); //6
//从X开始上一个为true的位置
System.out.println(bitSet.previousSetBit(10)); //9
System.out.println(bitSet.previousSetBit(5)); //4
System.out.println(bitSet.cardinality());
}
@Test
public void normal() {
BitSet bitSet = new BitSet();
bitSet.set(1, 11); //{1,2,3,4,5,6,7,8,9,10}
//值为 true的数量
System.out.println(bitSet.cardinality()); //10
BitSet bitSet1 = new BitSet();
bitSet1.set(5,11); //{5, 6, 7, 8, 9, 10}
//求交集
bitSet.and(bitSet1);
System.out.println(bitSet); //{5, 6, 7, 8, 9, 10}
BitSet bitSet2 = new BitSet();
bitSet2.set(20, 30);
//求并集
bitSet1.or(bitSet2);
System.out.println(bitSet1); //{5, 6, 7, 8, 9, 10, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29}
BitSet bitSet3 = new BitSet();
bitSet3.set(23);
bitSet3.set(24);//{23,24}
//剔除交集部分
bitSet2.andNot(bitSet3);
System.out.println(bitSet2); //{20, 21, 22, 25, 26, 27, 28, 29}
BitSet bitSet4 = new BitSet();
bitSet4.set(24);
bitSet4.set(25); //{24,25}
//并集后去除交集
bitSet3.xor(bitSet4);
System.out.println(bitSet3);
//给某个位置取反
bitSet4.flip(23);
//给某个范围取反
bitSet4.flip(22,24);
System.out.println(bitSet4);
}
}