相关博客
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}//设置一个范围为truebitSet.set(1, 10); //{1, 2, 3, 4, 5, 6, 7, 8, 9}//设置一个值为booleanbitSet.set(1, false); //{2, 3, 4, 5, 6, 7, 8, 9}//设置一个范围为booleanbitSet.set(1, 10, false);//{}}@Testpublic 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));}@Testpublic 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();}@Testpublic 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)); //0bitSet.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)); //2System.out.println(bitSet.nextSetBit(5)); //6//从X开始上一个为true的位置System.out.println(bitSet.previousSetBit(10)); //9System.out.println(bitSet.previousSetBit(5)); //4System.out.println(bitSet.cardinality());}@Testpublic 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()); //10BitSet 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);}}
