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

你可能感兴趣的:(java.util.BitSet-java中的位图类)