java.util.BitSet-java中的位圖類

1. 構(gòu)造方法和匯總統(tǒng)計(jì)方法

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
}

構(gòu)造方法

public BitSet()
    創(chuàng)建一個(gè)新的 BitSet: 所有的位初始均為 false/0。

public BitSet(int nbits)
    創(chuàng)建一個(gè) BitSet,初始大小足以顯式表示索引范圍在 0 到 nbits-1 的位。
    所有的位初始均為 false/0

匯總統(tǒng)計(jì) size/length/isEmpty/cardinality

 int size()
     返回此 BitSet 實(shí)際使用空間的位數(shù):nbits
 int length()
     返回此 BitSet 的"true"的位數(shù):BitSet 中最高設(shè)置位的索引加 1。
 boolean isEmpty()
     如果此 BitSet 中沒有包含任何設(shè)置為 true 的位,則返回 ture。
 int cardinality()
     返回此 BitSet 中設(shè)置為 true 的位數(shù)。

2. 增刪改查

- set

public static void main(String[] args) {
    BitSet bitSet = new BitSet(1024);

    bitSet.set(0); // 索引0的bit位, 設(shè)置 true :[0]=1
    bitSet.set(2); // 索引2的bit位, 設(shè)置 true :[2]=1
    bitSet.set(4, true); // 同上,索引 4 = true :[4]=1
    bitSet.set(5, 7); // [5, 7) 設(shè)置 true [5] = 1; [6] = 1
    bitSet.set(11, 12, false); // 索引區(qū)間[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多路復(fù)用的select函數(shù)里有與此相同的應(yīng)用,
    // 遍歷時(shí), 就不用考慮[7, size()]z這些了
    System.out.println(bitSet.length()); // 7
    // `cardinality` true的元素的個(gè)數(shù)- true-count
    System.out.println(bitSet.cardinality()); // 5

}
void set(int bitIndex)
      將指定索引 bitIndex 處的位設(shè)置為 true。
void set(int bitIndex, boolean value)
      將指定索引 bitIndex 處的位設(shè)置為指定的值 value。
void set(int fromIndex, int toIndex)
      將指定的 fromIndex(包括)到 toIndex(不包括)范圍內(nèi)的位設(shè)置為 true。
void set(int fromIndex, int toIndex, boolean value)
      將指定的 fromIndex(包括)到指定的 toIndex(不包括)范圍內(nèi)的位設(shè)置為 value。

- clear

public static void main(String[] args) {
    BitSet bitSet = new BitSet(1024);

    bitSet.set(0); // 索引0的bit位, 設(shè)置 true :[0]=1
    bitSet.set(2); // 索引2的bit位, 設(shè)置 true :[2]=1
    bitSet.set(4, true); // 同上,索引 4 = true :[4]=1
    bitSet.set(5, 7); // [5, 7) 設(shè)置 true [5] = 1; [6] = 1
    bitSet.set(11, 12, false); // 索引區(qū)間[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多路復(fù)用的select函數(shù)里有與此相同的應(yīng)用,
    // 遍歷時(shí), 就不用考慮[7, size()]z這些了
    System.out.println(bitSet.length()); // 7
    // `cardinality` true的元素的個(gè)數(shù)- true-count
    System.out.println(bitSet.cardinality()); // 2
}
void clear()
      將此 BitSet 中的所有位設(shè)置為 false。
 void clear(int bitIndex)
      將索引指定處的位設(shè)置為 false。
 void clear(int fromIndex, int toIndex)
      將指定的 fromIndex(包括)到指定的 toIndex(不包括)范圍內(nèi)的位設(shè)置為 false。

- flip

public static void main(String[] args) {
    BitSet bitSet = new BitSet(1024);

    bitSet.set(0); // 索引0的bit位, 設(shè)置 true :[0]=1
    bitSet.set(2); // 索引2的bit位, 設(shè)置 true :[2]=1
    bitSet.set(4, true); // 同上,索引 4 = true :[4]=1
    bitSet.set(5, 7); // [5, 7) 設(shè)置 true [5] = 1; [6] = 1
    bitSet.set(11, 12, false); // 索引區(qū)間[11, 12)置 false: [11] = false

    bitSet.clear(2); // [2] = false
    bitSet.flip(2); // 相當(dāng)于clear的反操作
    bitSet.clear(4, 6); // [4] = false; [5] = false
    bitSet.flip(4, 6); // 相當(dāng)于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多路復(fù)用的select函數(shù)里有與此相同的應(yīng)用,
    // 遍歷時(shí), 就不用考慮[7, size()]z這些了
    System.out.println(bitSet.length()); // 7
    // `cardinality` true的元素的個(gè)數(shù)- true-count
    System.out.println(bitSet.cardinality()); // 5
}
 void flip(int bitIndex)
      將指定索引處的位設(shè)置為其當(dāng)前值的補(bǔ)碼。
 void flip(int fromIndex, int toIndex)
      將指定的 fromIndex(包括)到指定的 toIndex(不包括)范圍內(nèi)的每個(gè)位設(shè)置為其當(dāng)前值的補(bǔ)碼。

: get/nextClearBit/nextSetBit/toString/cardinality

public static void main(String[] args) {
    BitSet bitSet = new BitSet(1024);

    bitSet.set(0); // 索引0的bit位, 設(shè)置 true :[0]=1
    bitSet.set(2); // 索引2的bit位, 設(shè)置 true :[2]=1
    bitSet.set(6, true); // 同上,索引 4 = true :[4]=1

    System.out.println(bitSet.nextClearBit(2)); // 3 [2]開始的第一個(gè)false的索引(包括2)=>3
    System.out.println(bitSet.nextSetBit(2)); // 2 [2]開始的第一個(gè)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} 返回了一個(gè)新的BitSet, 新的索引從第一個(gè)開始[from, to)
}
 int nextClearBit(int fromIndex)
      返回第一個(gè)設(shè)置為 false 的位的索引,在fromIndex起(包含)的索引上。
 int nextSetBit(int fromIndex)
      返回第一個(gè)設(shè)置為 true 的位的索引,在fromIndex起(包含)的索引上。
 boolean get(int bitIndex)
      返回指定索引處的位值。
 String toString()
      返回此位 set 的字符串表示形式。
 // {2, 4, 10, 99}

3. BitSet 之:集合操作:與或非異或

 void and(BitSet set)
      對(duì)此目標(biāo)位 set 和參數(shù)位 set 執(zhí)行邏輯與操作。
 void andNot(BitSet set)
      清除此 BitSet 中所有的位,其相應(yīng)的位在指定的 BitSet 中已設(shè)置。
 boolean intersects(BitSet set)
      如果指定的 BitSet 中有設(shè)置為 true 的位,并且在此 BitSet 中也將其設(shè)置為 true,則返回 ture。
 void or(BitSet set)
      對(duì)此位 set 和位 set 參數(shù)執(zhí)行邏輯或操作。
 void xor(BitSet set)
      對(duì)此位 set 和位 set 參數(shù)執(zhí)行邏輯異或操作。
 
 boolean equals(Object obj) // 比較兩個(gè)BitSet:里面所有位的true比較
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容