美文网首页
java.util.BitSet-java中的位图类

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

作者: 海德堡绝尘 | 来源:发表于2020-04-01 18:12 被阅读0次

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比较

相关文章

  • java.util.BitSet-java中的位图类

    1. 构造方法和汇总统计方法 构造方法 汇总统计 size/length/isEmpty/cardinalit...

  • 无数据占位图

    封装类 .h //========== 无内容占位图 ==========//#import// 无数据占位图的类...

  • Android中Bitmap的用法与基本优化

    Bitmap介绍 Bitmap类代表位图,是Android系统中图像处理中的一个重要类。使用该类,不仅可以获取图像...

  • Ps—数字图像基础(16)

    计算机图形主要分为两类,一类是位图图像,另外一类是矢量图形,Photoshop是典型的位图软件,但它也包含矢量功能...

  • Bitmap Images and Image Masks

    位图图像和图像蒙板就像Quartz中的任何图形图元。 Quartz中的图像和图像蒙板都由CGImageRef数据类...

  • Bitmap概念解读、基本工具类使用、高斯模糊

    Bitmap介绍 Bitmap,拆分来读,意为位图。 Bitmap是Android系统中的图像处理的最重要类之一。...

  • PS工具栏分类

    工具栏可分为四类: 一、选择类(绿框):可以通过不同的方式选择图层或图层中的元素; 二、位图类(粉框):绘制出的图...

  • CorelDRAW位图转换矢量图

    使用CorelDRAW 软件中的快速描摹位图就是可以使位图转化为矢量图的一个过程,不过描摹位图之后,会丢掉很多位图...

  • iOS底层探索 -- 类的结构分析 (二)

    isa走位图镇楼 其实在研究类或是对象的过程中,这张图一直是贯穿整个流程的线索。 消失的类方法 在我们上次的研究中...

  • Linux中的位图

    什么是位图 位图(bitmap)的定义 维基百科中关于位图的介绍: 一种数据结构,代表了有限域中的稠集(dense...

网友评论

      本文标题:java.util.BitSet-java中的位图类

      本文链接:https://www.haomeiwen.com/subject/kljauhtx.html