鴻蒙OS BitSet

2022-07-13 17:02 更新

BitSet

java.lang.Object

|---java.util.BitSet

public class BitSet
extends Object
implements Cloneable, Serializable

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

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

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

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

如果沒(méi)有外部同步,BitSet 對(duì)于多線程使用是不安全的。

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

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

方法總結(jié)

修飾符和類型 方法 描述
void and(BitSet set) 執(zhí)行此目標(biāo)位集與參數(shù)位集的邏輯與。
void andNot(BitSet set) 清除此 BitSet 中在指定 BitSet 中設(shè)置了相應(yīng)位的所有位。
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 會(huì)生成一個(gè)與其相同的新 BitSet。
boolean equals(Object obj) 將此對(duì)象與指定對(duì)象進(jìn)行比較。
void flip(int bitIndex) 將指定索引處的位設(shè)置為其當(dāng)前值的補(bǔ)碼。
void flip(int fromIndex, int toIndex) 將從指定的 fromIndex(包括)到指定的 toIndex(不包括)的每個(gè)位設(shè)置為其當(dāng)前值的補(bǔ)碼。
boolean get(int bitIndex) 返回具有指定索引的位的值。
BitSet get(int fromIndex, int toIndex) 返回一個(gè)新的 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)的第一個(gè)設(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í)際使用的空間位數(shù),以表示位值。
IntStream stream() 返回此 BitSet 包含處于設(shè)置狀態(tài)的位的索引流。
byte[] toByteArray() 返回一個(gè)包含此位集中所有位的新字節(jié)數(shù)組。
long[] toLongArray() 返回一個(gè)新的長(zhǎng)數(shù)組,其中包含此位集中的所有位。
String toString() 返回此位集的字符串表示形式。
static BitSet valueOf(byte[] bytes) 返回包含給定字節(jié)數(shù)組中所有位的新位集。
static BitSet valueOf(long[] longs) 返回一個(gè)包含給定長(zhǎng)數(shù)組中所有位的新位集。
static BitSet valueOf(ByteBuffer bb) 返回一個(gè)新的位集,其中包含給定字節(jié)緩沖區(qū)中其位置和限制之間的所有位。
static BitSet valueOf(LongBuffer lb) 返回一個(gè)新的位集,其中包含給定長(zhǎng)緩沖區(qū)中其位置和限制之間的所有位。
void xor(BitSet set) 使用位集參數(shù)執(zhí)行此位集的邏輯異或。
從類 java.lang.Object 繼承的方法
finalize, getClass, notify, notifyAll, wait, wait, wait

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

BitSet

public BitSet()

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

BitSet

public BitSet(int nbits)

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

參數(shù):

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

Throws:

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

方法詳情

valueOf

public static BitSet valueOf(long[] longs)

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

更準(zhǔn)確地說(shuō),對(duì)于所有 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 一個(gè)長(zhǎng)數(shù)組,包含一個(gè)位序列的小端表示,用作新位集的初始位

返回:

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

valueOf

public static BitSet valueOf(LongBuffer lb)

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

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

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

參數(shù):

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

返回:

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

valueOf

public static BitSet valueOf(byte[] bytes)

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

更準(zhǔn)確地說(shuō),對(duì)于所有 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 一個(gè)字節(jié)數(shù)組,包含一個(gè)位序列的小端表示,用作新位集的初始位

返回:

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

valueOf

public static BitSet valueOf(ByteBuffer bb)

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

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

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

參數(shù):

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

返回:

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

toByteArray

public byte[] toByteArray()

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

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

返回:

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

toLongArray

public long[] toLongArray()

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

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

返回:

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

flip

public void flip(int bitIndex)

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

參數(shù):

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

Throws:

Throw名稱 Throw描述
IndexOutOfBoundsException 如果指定的索引為負(fù)

flip

public void flip(int fromIndex, int toIndex)

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

參數(shù):

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

Throws:

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

set

public void set(int bitIndex)

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

參數(shù):

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

Throws:

Throw名稱 Throw描述
IndexOutOfBoundsException 如果指定的索引為負(fù)

set

public void set(int bitIndex, boolean value)

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

參數(shù):

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

Throws:

Throw名稱 Throw描述
IndexOutOfBoundsException 如果指定的索引為負(fù)

set

public void set(int fromIndex, int toIndex)

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

參數(shù):

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

Throws:

Throw名稱 Throw描述
IndexOutOfBoundsException 如果 fromIndex 為負(fù)數(shù),或 toIndex 為負(fù)數(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 為負(fù)數(shù),或 toIndex 為負(fù)數(shù),或 fromIndex 大于 toIndex

clear

public void clear(int bitIndex)

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

參數(shù):

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

Throws:

Throw名稱 Throw描述
IndexOutOfBoundsException 如果指定的索引為負(fù)

clear

public void clear(int fromIndex, int toIndex)

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

參數(shù):

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

Throws:

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

clear

public void clear()

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

get

public boolean get(int bitIndex)

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

參數(shù):

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

返回:

具有指定索引的位的值

Throws:

Throw名稱 Throw描述
IndexOutOfBoundsException 如果指定的索引為負(fù)

get

public BitSet get(int fromIndex, int toIndex)

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

參數(shù):

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

返回:

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

Throws:

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

nextSetBit

public int nextSetBit(int fromIndex)

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

要遍歷 BitSet 中的真實(shí)位,請(qǐng)使用以下循環(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 開始檢查的索引(包括)

返回:

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

Throws:

Throw名稱 Throw描述
IndexOutOfBoundsException 如果指定的索引為負(fù)

nextClearBit

public int nextClearBit(int fromIndex)

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

參數(shù):

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

返回:

下一個(gè) clear 位的索引

Throws:

Throw名稱 Throw描述
IndexOutOfBoundsException 如果指定的索引為負(fù)

previousSetBit

public int previousSetBit(int fromIndex)

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

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

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

參數(shù):

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

返回:

前一個(gè)設(shè)置位的索引,如果沒(méi)有這樣的位,則為 -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)

返回:

前一個(gè)清除位的索引,如果沒(méi)有這樣的位,則為 -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í)行此目標(biāo)位集與參數(shù)位集的邏輯與。 修改此位集,以便當(dāng)且僅當(dāng)它最初都具有值 true 并且位集參數(shù)中的相應(yīng)位也具有值 true 時(shí),其中的每個(gè)位都具有值 true。

參數(shù):

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

or

public void or(BitSet set)

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

參數(shù):

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

xor

public void xor(BitSet set)

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

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

參數(shù):

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

andNot

public void andNot(BitSet set)

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

參數(shù):

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

hashCode

public int hashCode()

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

哈希碼定義為以下計(jì)算的結(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);
 }

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

覆蓋:

類 Object 中的 hashCode

返回:

此位集的哈希碼值

size

public int size()

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

返回:

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

equals

public boolean equals(Object obj)

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

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

一定為true。 不比較兩個(gè)位集的當(dāng)前大小。

覆蓋:

類 Object 中的等于

參數(shù):

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

返回:

如果對(duì)象相同,則為 true; 否則為false

clone

public Object clone()

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

覆蓋:

在類 Object 中克隆

返回:

該位集的克隆

toString

public String toString()

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

例子:

 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)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)