相关博客

https://blog.csdn.net/weixin_43067762/article/details/105637469
https://my.oschina.net/cloudcoder/blog/294810

自己整理的api

  1. package com.crayon2f.algorithm.bit;
  2. import org.junit.Test;
  3. import java.util.BitSet;
  4. /**
  5. * Created by feifan.gou@gmail.com on 2021/7/28 18:09.
  6. */
  7. public class BitSetLearn {
  8. @Test
  9. //设置方法
  10. public void set() {
  11. BitSet bitSet = new BitSet();
  12. //设置某个值为true(有)
  13. bitSet.set(1); //{1}
  14. //设置一个范围为true
  15. bitSet.set(1, 10); //{1, 2, 3, 4, 5, 6, 7, 8, 9}
  16. //设置一个值为boolean
  17. bitSet.set(1, false); //{2, 3, 4, 5, 6, 7, 8, 9}
  18. //设置一个范围为boolean
  19. bitSet.set(1, 10, false);//{}
  20. }
  21. @Test
  22. public void get() {
  23. //
  24. BitSet bitSet = new BitSet();
  25. bitSet.set(1, 11); //{1,2,3,4,5,6,7,8,9,10}
  26. //获取指定索引是否有值
  27. System.out.println(bitSet.get(2));
  28. //获取范围
  29. BitSet bitSet1 = bitSet.get(0, 2);
  30. System.out.println(bitSet1.get(3));
  31. }
  32. @Test
  33. public void clear() {
  34. BitSet bitSet = new BitSet();
  35. bitSet.set(1, 11); //{1,2,3,4,5,6,7,8,9,10}
  36. //去除指定位置
  37. bitSet.clear(2);
  38. //去除范围
  39. bitSet.clear(3,6);
  40. //去除所有
  41. // bitSet.clear();
  42. }
  43. @Test
  44. public void search() {
  45. BitSet bitSet = new BitSet();
  46. bitSet.set(1, 11); //{1,2,3,4,5,6,7,8,9,10}
  47. //从X开始查找下一个为false的位置
  48. System.out.println(bitSet.nextClearBit(5)); // 11
  49. //从X开始查找上一个为false的位置
  50. System.out.println(bitSet.previousClearBit(5)); //0
  51. bitSet.clear();
  52. bitSet.set(2,5); //{2,3,4}
  53. bitSet.set(6,10); //{2,3,4,6,7,8,9}
  54. //从X开始下一个为true的位置
  55. System.out.println(bitSet.nextSetBit(0)); //2
  56. System.out.println(bitSet.nextSetBit(5)); //6
  57. //从X开始上一个为true的位置
  58. System.out.println(bitSet.previousSetBit(10)); //9
  59. System.out.println(bitSet.previousSetBit(5)); //4
  60. System.out.println(bitSet.cardinality());
  61. }
  62. @Test
  63. public void normal() {
  64. BitSet bitSet = new BitSet();
  65. bitSet.set(1, 11); //{1,2,3,4,5,6,7,8,9,10}
  66. //值为 true的数量
  67. System.out.println(bitSet.cardinality()); //10
  68. BitSet bitSet1 = new BitSet();
  69. bitSet1.set(5,11); //{5, 6, 7, 8, 9, 10}
  70. //求交集
  71. bitSet.and(bitSet1);
  72. System.out.println(bitSet); //{5, 6, 7, 8, 9, 10}
  73. BitSet bitSet2 = new BitSet();
  74. bitSet2.set(20, 30);
  75. //求并集
  76. bitSet1.or(bitSet2);
  77. System.out.println(bitSet1); //{5, 6, 7, 8, 9, 10, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29}
  78. BitSet bitSet3 = new BitSet();
  79. bitSet3.set(23);
  80. bitSet3.set(24);//{23,24}
  81. //剔除交集部分
  82. bitSet2.andNot(bitSet3);
  83. System.out.println(bitSet2); //{20, 21, 22, 25, 26, 27, 28, 29}
  84. BitSet bitSet4 = new BitSet();
  85. bitSet4.set(24);
  86. bitSet4.set(25); //{24,25}
  87. //并集后去除交集
  88. bitSet3.xor(bitSet4);
  89. System.out.println(bitSet3);
  90. //给某个位置取反
  91. bitSet4.flip(23);
  92. //给某个范围取反
  93. bitSet4.flip(22,24);
  94. System.out.println(bitSet4);
  95. }
  96. }