鴻蒙OS BitSet

2022-07-13 17:02 更新

BitSet

java.lang.Object

|---java.util.BitSet

public class BitSet
extends Object
implements Cloneable, Serializable

這個類實現(xiàn)了一個根據(jù)需要增長的位向量。 位集的每個組件都有一個布爾值。 BitSet 的位由非負整數(shù)索引。 可以檢查、設(shè)置或清除各個索引位。 一個 BitSet 可用于通過邏輯 AND、邏輯異或和邏輯異或操作來修改另一個 BitSet 的內(nèi)容。

默認情況下,集合中的所有位最初都具有值 false。

每個位集都有一個當前大小,即該位集當前使用的空間位數(shù)。 請注意,大小與位集的實現(xiàn)有關(guān),因此它可能會隨著實現(xiàn)而改變。 位集的長度與位集的邏輯長度相關(guān),并且獨立于實現(xiàn)來定義。

除非另有說明,否則將 null 參數(shù)傳遞給 BitSet 中的任何方法都將導致 NullPointerException。

如果沒有外部同步,BitSet 對于多線程使用是不安全的。

構(gòu)造函數(shù)摘要

構(gòu)造函數(shù) 描述
BitSet() 創(chuàng)建一個新的位集。
BitSet(int nbits) 創(chuàng)建一個位集,其初始大小足夠大,可以顯式表示索引范圍為 0 到 nbits-1 的位。

方法總結(jié)

修飾符和類型 方法 描述
void and(BitSet set) 執(zhí)行此目標位集與參數(shù)位集的邏輯與。
void andNot(BitSet set) 清除此 BitSet 中在指定 BitSet 中設(shè)置了相應位的所有位。
int cardinality() 返回此 BitSet 中設(shè)置為 true 的位數(shù)。
void clear() 將此 BitSet 中的所有位設(shè)置為 false。
void clear(int bitIndex) 將索引指定的位設(shè)置為 false。
void clear(int fromIndex, int toIndex) 將從指定的 fromIndex(包括)到指定的 toIndex(不包括)的位設(shè)置為 false。
Object clone() 克隆此 BitSet 會生成一個與其相同的新 BitSet。
boolean equals(Object obj) 將此對象與指定對象進行比較。
void flip(int bitIndex) 將指定索引處的位設(shè)置為其當前值的補碼。
void flip(int fromIndex, int toIndex) 將從指定的 fromIndex(包括)到指定的 toIndex(不包括)的每個位設(shè)置為其當前值的補碼。
boolean get(int bitIndex) 返回具有指定索引的位的值。
BitSet get(int fromIndex, int toIndex) 返回一個新的 BitSet,該 BitSet 由該 BitSet 中從 fromIndex(包括)到 toIndex(不包括)的位組成。
int hashCode() 返回此位集的哈希碼值。
boolean intersects(BitSet set) 如果指定的 BitSet 有任何位設(shè)置為 true,并且在此 BitSet 中也設(shè)置為 true,則返回 true。
boolean isEmpty() 如果此 BitSet 不包含設(shè)置為 true 的位,則返回 true。
int length() 返回此 BitSet 的“邏輯大小”:BitSet 中最高設(shè)置位的索引加一。
int nextClearBit(int fromIndex) 返回在指定起始索引上或之后發(fā)生的設(shè)置為 false 的第一位的索引。
int nextSetBit(int fromIndex) 返回在指定起始索引上或之后出現(xiàn)的第一個設(shè)置為 true 的索引。
void or(BitSet set) 使用位集參數(shù)執(zhí)行此位集的邏輯或。
int previousClearBit(int fromIndex) 返回設(shè)置為 false 的最近位的索引,該位出現(xiàn)在指定的起始索引上或之前。
int previousSetBit(int fromIndex) 返回設(shè)置為 true 的最近位的索引,該位出現(xiàn)在指定的起始索引上或之前。
void set(int bitIndex) 將指定索引處的位設(shè)置為真。
void set(int bitIndex, boolean value) 將指定索引處的位設(shè)置為指定值。
void set(int fromIndex, int toIndex) 將指定 fromIndex(包括)到指定 toIndex(不包括)的位設(shè)置為 true。
void set(int fromIndex, int toIndex, boolean value) 將指定的 fromIndex(包括)到指定的 toIndex(不包括)的位設(shè)置為指定的值。
int size() 返回此 BitSet 實際使用的空間位數(shù),以表示位值。
IntStream stream() 返回此 BitSet 包含處于設(shè)置狀態(tài)的位的索引流。
byte[] toByteArray() 返回一個包含此位集中所有位的新字節(jié)數(shù)組。
long[] toLongArray() 返回一個新的長數(shù)組,其中包含此位集中的所有位。
String toString() 返回此位集的字符串表示形式。
static BitSet valueOf(byte[] bytes) 返回包含給定字節(jié)數(shù)組中所有位的新位集。
static BitSet valueOf(long[] longs) 返回一個包含給定長數(shù)組中所有位的新位集。
static BitSet valueOf(ByteBuffer bb) 返回一個新的位集,其中包含給定字節(jié)緩沖區(qū)中其位置和限制之間的所有位。
static BitSet valueOf(LongBuffer lb) 返回一個新的位集,其中包含給定長緩沖區(qū)中其位置和限制之間的所有位。
void xor(BitSet set) 使用位集參數(shù)執(zhí)行此位集的邏輯異或。
從類 java.lang.Object 繼承的方法
finalize, getClass, notify, notifyAll, wait, wait, wait

構(gòu)造函數(shù)詳細信息

BitSet

public BitSet()

創(chuàng)建一個新的位集。 所有位最初都是錯誤的。

BitSet

public BitSet(int nbits)

創(chuàng)建一個位集,其初始大小足夠大,可以顯式表示索引范圍為 0 到 nbits-1 的位。 所有位最初都是錯誤的。

參數(shù):

參數(shù)名稱 參數(shù)描述
nbits 位集的初始大小

Throws:

Throw名稱 Throw描述
NegativeArraySizeException 如果指定的初始大小為負

方法詳情

valueOf

public static BitSet valueOf(long[] longs)

返回一個包含給定長數(shù)組中所有位的新位集。

更準確地說,對于所有 n < 64 * longs.length,BitSet.valueOf(longs).get(n) == ((longs[n/64] & (1L<<(n%64))) != 0)。

此方法等效于 BitSet.valueOf(LongBuffer.wrap(longs))。

參數(shù):

參數(shù)名稱 參數(shù)描述
longs 一個長數(shù)組,包含一個位序列的小端表示,用作新位集的初始位

返回:

包含長數(shù)組中所有位的 BitSet

valueOf

public static BitSet valueOf(LongBuffer lb)

返回一個新的位集,其中包含給定長緩沖區(qū)中其位置和限制之間的所有位。

更準確地說,BitSet.valueOf(lb).get(n) == ((lb.get(lb.position()+n/64) & (1L<<(n%64))) != 0) n < 64 * lb.remaining()。

該方法不會修改長緩沖區(qū),并且位集不會保留對緩沖區(qū)的引用。

參數(shù):

參數(shù)名稱 參數(shù)描述
lb 一個長緩沖區(qū),包含其位置和限制之間的位序列的小端表示,用作新位集的初始位

返回:

包含指定范圍內(nèi)緩沖區(qū)中所有位的 BitSet

valueOf

public static BitSet valueOf(byte[] bytes)

返回包含給定字節(jié)數(shù)組中所有位的新位集。

更準確地說,對于所有 n < 8 * bytes.length,BitSet.valueOf(bytes).get(n) == ((bytes[n/8] & (1<<(n%8))) != 0)。

此方法等效于 BitSet.valueOf(ByteBuffer.wrap(bytes))。

參數(shù):

參數(shù)名稱 參數(shù)描述
bytes 一個字節(jié)數(shù)組,包含一個位序列的小端表示,用作新位集的初始位

返回:

包含字節(jié)數(shù)組中所有位的 BitSet

valueOf

public static BitSet valueOf(ByteBuffer bb)

返回一個新的位集,其中包含給定字節(jié)緩沖區(qū)中其位置和限制之間的所有位。

更準確地說,BitSet.valueOf(bb).get(n) == ((bb.get(bb.position()+n/8) & (1<<(n%8))) != 0) n < 8 * bb.remaining()。

此方法不會修改字節(jié)緩沖區(qū),并且位集不會保留對緩沖區(qū)的引用。

參數(shù):

參數(shù)名稱 參數(shù)描述
bb 一個字節(jié)緩沖區(qū),包含其位置和限制之間的位序列的小端表示,用作新位集的初始位

返回:

包含指定范圍內(nèi)緩沖區(qū)中所有位的 BitSet

toByteArray

public byte[] toByteArray()

返回一個包含此位集中所有位的新字節(jié)數(shù)組。

更準確地說,如果 byte[] bytes = s.toByteArray(); 然后 bytes.length == (s.length()+7)/8 和 s.get(n) == ((bytes[n/8] & (1<<(n%8))) != 0) 對于所有 n < 8 * bytes.length。

返回:

包含此位集中所有位的小端表示的字節(jié)數(shù)組

toLongArray

public long[] toLongArray()

返回一個新的長數(shù)組,其中包含此位集中的所有位。

更準確地說,如果 long[] longs = s.toLongArray(); 然后 longs.length == (s.length()+63)/64 和 s.get(n) == ((longs[n/64] & (1L<<(n%64))) != 0) 對于所有 n < 64 * longs.length。

返回:

一個長數(shù)組,包含此位集中所有位的小端表示

flip

public void flip(int bitIndex)

將指定索引處的位設(shè)置為其當前值的補碼。

參數(shù):

參數(shù)名稱 參數(shù)描述
bitIndex 要翻轉(zhuǎn)的位的索引

Throws:

Throw名稱 Throw描述
IndexOutOfBoundsException 如果指定的索引為負

flip

public void flip(int fromIndex, int toIndex)

將從指定的 fromIndex(包括)到指定的 toIndex(不包括)的每個位設(shè)置為其當前值的補碼。

參數(shù):

參數(shù)名稱 參數(shù)描述
fromIndex 要翻轉(zhuǎn)的第一位的索引
toIndex 最后一位翻轉(zhuǎn)后的索引

Throws:

Throw名稱 Throw描述
IndexOutOfBoundsException 如果 fromIndex 為負數(shù),或 toIndex 為負數(shù),或 fromIndex 大于 toIndex

set

public void set(int bitIndex)

將指定索引處的位設(shè)置為true。

參數(shù):

參數(shù)名稱 參數(shù)描述
bitIndex 位索引

Throws:

Throw名稱 Throw描述
IndexOutOfBoundsException 如果指定的索引為負

set

public void set(int bitIndex, boolean value)

將指定索引處的位設(shè)置為指定值。

參數(shù):

參數(shù)名稱 參數(shù)描述
bitIndex 位索引
value 要設(shè)置的布爾值

Throws:

Throw名稱 Throw描述
IndexOutOfBoundsException 如果指定的索引為負

set

public void set(int fromIndex, int toIndex)

將指定 fromIndex(包括)到指定 toIndex(不包括)的位設(shè)置為 true。

參數(shù):

參數(shù)名稱 參數(shù)描述
fromIndex 要設(shè)置的第一位的索引
toIndex 要設(shè)置的最后一位之后的索引

Throws:

Throw名稱 Throw描述
IndexOutOfBoundsException 如果 fromIndex 為負數(shù),或 toIndex 為負數(shù),或 fromIndex 大于 toIndex

set

public void set(int fromIndex, int toIndex, boolean value)

將指定的 fromIndex(包括)到指定的 toIndex(不包括)的位設(shè)置為指定的值。

參數(shù):

參數(shù)名稱 參數(shù)描述
fromIndex 要設(shè)置的第一位的索引
toIndex 要設(shè)置的最后一位之后的索引
value 將所選位設(shè)置為的值

Throws:

Throw名稱 Throw描述
IndexOutOfBoundsException 如果 fromIndex 為負數(shù),或 toIndex 為負數(shù),或 fromIndex 大于 toIndex

clear

public void clear(int bitIndex)

將索引指定的位設(shè)置為 false。

參數(shù):

參數(shù)名稱 參數(shù)描述
bitIndex 要清除的位的索引

Throws:

Throw名稱 Throw描述
IndexOutOfBoundsException 如果指定的索引為負

clear

public void clear(int fromIndex, int toIndex)

將從指定的 fromIndex(包括)到指定的 toIndex(不包括)的位設(shè)置為 false。

參數(shù):

參數(shù)名稱 參數(shù)描述
fromIndex 要清除的第一位的索引
toIndex 要清除的最后一位之后的索引

Throws:

Throw名稱 Throw描述
IndexOutOfBoundsException 如果 fromIndex 為負數(shù),或 toIndex 為負數(shù),或 fromIndex 大于 toIndex

clear

public void clear()

將此 BitSet 中的所有位設(shè)置為 false。

get

public boolean get(int bitIndex)

返回具有指定索引的位的值。 如果當前在此 BitSet 中設(shè)置了索引為 bitIndex 的位,則該值為 true; 否則,結(jié)果為false。

參數(shù):

參數(shù)名稱 參數(shù)描述
bitIndex 位索引

返回:

具有指定索引的位的值

Throws:

Throw名稱 Throw描述
IndexOutOfBoundsException 如果指定的索引為負

get

public BitSet get(int fromIndex, int toIndex)

返回一個新的 BitSet,該 BitSet 由該 BitSet 中從 fromIndex(包括)到 toIndex(不包括)的位組成。

參數(shù):

參數(shù)名稱 參數(shù)描述
fromIndex 要包含的第一位的索引
toIndex 要包含的最后一位之后的索引

返回:

此 BitSet 范圍內(nèi)的新 BitSet

Throws:

Throw名稱 Throw描述
IndexOutOfBoundsException 如果 fromIndex 為負數(shù),或 toIndex 為負數(shù),或 fromIndex 大于 toIndex

nextSetBit

public int nextSetBit(int fromIndex)

返回在指定起始索引上或之后出現(xiàn)的第一個設(shè)置為 true 的索引。 如果不存在這樣的位,則返回 -1。

要遍歷 BitSet 中的真實位,請使用以下循環(huán):

  for (int i = bs.nextSetBit(0); i >= 0; i = bs.nextSetBit(i+1)) {
     // operate on index i here
     if (i == Integer.MAX_VALUE) {
         break; // or (i+1) would overflow
     }
 }

參數(shù):

參數(shù)名稱 參數(shù)描述
fromIndex 開始檢查的索引(包括)

返回:

下一個設(shè)置位的索引,如果沒有這樣的位,則為 -1

Throws:

Throw名稱 Throw描述
IndexOutOfBoundsException 如果指定的索引為負

nextClearBit

public int nextClearBit(int fromIndex)

返回在指定起始索引上或之后發(fā)生的設(shè)置為 false 的第一位的索引。

參數(shù):

參數(shù)名稱 參數(shù)描述
fromIndex 開始檢查的索引(包括)

返回:

下一個 clear 位的索引

Throws:

Throw名稱 Throw描述
IndexOutOfBoundsException 如果指定的索引為負

previousSetBit

public int previousSetBit(int fromIndex)

返回設(shè)置為 true 的最近位的索引,該位出現(xiàn)在指定的起始索引上或之前。 如果不存在這樣的位,或者如果給出 -1 作為起始索引,則返回 -1。

要遍歷 BitSet 中的真實位,請使用以下循環(huán):

  for (int i = bs.length(); (i = bs.previousSetBit(i-1)) >= 0; ) {
     // operate on index i here
 }

參數(shù):

參數(shù)名稱 參數(shù)描述
fromIndex 開始檢查的索引(包括)

返回:

前一個設(shè)置位的索引,如果沒有這樣的位,則為 -1

Throws:

Throw名稱 Throw描述
IndexOutOfBoundsException 如果指定的索引小于 -1

previousClearBit

public int previousClearBit(int fromIndex)

返回設(shè)置為 false 的最近位的索引,該位出現(xiàn)在指定的起始索引上或之前。 如果不存在這樣的位,或者如果給出 -1 作為起始索引,則返回 -1。

參數(shù):

參數(shù)名稱 參數(shù)描述
fromIndex the index to start checking from (inclusive)

返回:

前一個清除位的索引,如果沒有這樣的位,則為 -1

Throws:

Throw名稱 Throw描述
IndexOutOfBoundsException 如果指定的索引小于 -1

length

public int length()

返回此 BitSet 的“邏輯大小”:BitSet 中最高設(shè)置位的索引加一。 如果 BitSet 不包含設(shè)置位,則返回零。

返回:

此 BitSet 的邏輯大小

isEmpty

public boolean isEmpty()

如果此 BitSet 不包含設(shè)置為 true 的位,則返回 true。

返回:

指示此 BitSet 是否為空的布爾值

intersects

public boolean intersects(BitSet set)

如果指定的 BitSet 有任何位設(shè)置為 true,并且在此 BitSet 中也設(shè)置為 true,則返回 true。

參數(shù):

參數(shù)名稱 參數(shù)描述
set 與之相交的位集

返回:

布爾值,指示此 BitSet 是否與指定的 BitSet 相交

cardinality

public int cardinality()

返回此 BitSet 中設(shè)置為 true 的位數(shù)。

返回:

此 BitSet 中設(shè)置為 true 的位數(shù)

and

public void and(BitSet set)

執(zhí)行此目標位集與參數(shù)位集的邏輯與。 修改此位集,以便當且僅當它最初都具有值 true 并且位集參數(shù)中的相應位也具有值 true 時,其中的每個位都具有值 true。

參數(shù):

參數(shù)名稱 參數(shù)描述
set 位設(shè)置

or

public void or(BitSet set)

使用位集參數(shù)執(zhí)行此位集的邏輯或。 修改此位集,以便當且僅當它已經(jīng)具有值 true 或位集參數(shù)中的相應位具有值 true 時,其中的位具有值 true。

參數(shù):

參數(shù)名稱 參數(shù)描述
set 位設(shè)置

xor

public void xor(BitSet set)

使用位集參數(shù)執(zhí)行此位集的邏輯異或。 此位集被修改,以便當且僅當以下語句之一成立時,其中的位具有值 true:

  • 該位最初的值為真,而參數(shù)中的相應位的值為false。
  • 該位最初的值為假,而參數(shù)中的相應位的值為true。

參數(shù):

參數(shù)名稱 參數(shù)描述
set 位設(shè)置

andNot

public void andNot(BitSet set)

清除此 BitSet 中在指定 BitSet 中設(shè)置了相應位的所有位。

參數(shù):

參數(shù)名稱 參數(shù)描述
set 用來屏蔽此 BitSet 的 BitSet

hashCode

public int hashCode()

返回此位集的哈希碼值。 哈希碼僅取決于在此 BitSet 中設(shè)置了哪些位。

哈希碼定義為以下計算的結(jié)果:

  public int hashCode() {
     long h = 1234;
     long[] words = toLongArray();
     for (int i = words.length; --i >= 0; )
         h ^= words[i] * (i + 1);
     return (int)((h >> 32) ^ h);
 }

請注意,如果位集發(fā)生更改,哈希碼也會更改。

覆蓋:

類 Object 中的 hashCode

返回:

此位集的哈希碼值

size

public int size()

返回此 BitSet 實際使用的空間位數(shù),以表示位值。 集合中的最大元素是大小 - 第一個元素。

返回:

當前在此位集中的位數(shù)

equals

public boolean equals(Object obj)

將此對象與指定對象進行比較。 當且僅當參數(shù)不為 null 并且是具有與該位集完全相同的位集設(shè)置為 true 的 Bitset 對象時,結(jié)果才為 true。 也就是說,對于每個非負 int 索引 k,

((BitSet)obj).get(k) == this.get(k)

一定為true。 不比較兩個位集的當前大小。

覆蓋:

類 Object 中的等于

參數(shù):

參數(shù)名稱 參數(shù)描述
obj 比較的對象

返回:

如果對象相同,則為 true; 否則為false

clone

public Object clone()

克隆此 BitSet 會生成一個與其相同的新 BitSet。 位集的克隆是另一個位集,它具有與該位集完全相同的位設(shè)置為true。

覆蓋:

在類 Object 中克隆

返回:

該位集的克隆

toString

public String toString()

返回此位集的字符串表示形式。 對于此 BitSet 包含處于設(shè)置狀態(tài)的位的每個索引,該索引的十進制表示包含在結(jié)果中。 此類索引按從低到高的順序列出,用“、”(逗號和空格)分隔并用大括號括起來,從而形成一組整數(shù)的常用數(shù)學符號。

例子:

 BitSet drPepper = new BitSet();

現(xiàn)在 drPepper.toString() 返回“{}”。

 drPepper.set(2);

現(xiàn)在 drPepper.toString() 返回“{2}”。

 drPepper.set(4); drPepper.set(10);

現(xiàn)在 drPepper.toString() 返回“{2, 4, 10}”。

覆蓋:

類 Object 中的 toString

返回:

此位集的字符串表示

stream

public IntStream stream()

返回此 BitSet 包含處于設(shè)置狀態(tài)的位的索引流。 索引按從低到高的順序返回。 流的大小是設(shè)置狀態(tài)的位數(shù),等于 cardinality() 方法返回的值。

在終端流操作執(zhí)行期間,位設(shè)置必須保持不變。 否則,終端流操作的結(jié)果是不確定的。

返回:

表示集合索引的整數(shù)流

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號