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