Java BitSet 類



簡介

Java BitSet 類建立了一種特殊的陣列,用於儲存位值。BitSet 陣列可以根據需要增加大小。這使其類似於位向量。這是一個遺留類,但在 Java 2 版本 1.4 中進行了完全重新設計。

Java BitSet 類實現了一個根據需要增長的位向量。以下是關於 BitSet 的重要要點:

  • 如果沒有外部同步,BitSet 不適用於多執行緒使用。

  • 集合中的所有位最初都具有 false 值。

  • 向 BitSet 中任何方法傳遞 null 引數將導致 NullPointerException。

類宣告

以下是java.util.BitSet 類的宣告:

public class BitSet
   extends Object
   implements Cloneable, Serializable

類建構函式

序號 建構函式 & 描述
1

BitSet()

此建構函式建立一個新的位集。

2

BitSet(int nbits)

此建構函式建立一個位集,其初始大小足以顯式表示索引範圍在 0 到 nbits-1 之間的位。

類方法

序號 方法 & 描述
1 void and(BitSet set)

此方法執行此目標位集與引數位集的邏輯 AND。

2 void andNot(BitSet set)

此方法清除此 BitSet 中所有在指定 BitSet 中對應的位被設定的位。

3 int cardinality()

此方法返回此 BitSet 中設定為 true 的位的數量。

4 void clear()

此方法將此 BitSet 中的所有位設定為 false。

5 Object clone()

此方法克隆此 BitSet 並生成一個與其相等的新 BitSet。

6 boolean equals(Object obj)

此方法將此物件與指定物件進行比較。

7 void flip(int bitIndex)

此方法將指定索引處的位設定為其當前值的補碼。

8 boolean get(int bitIndex)

此方法返回具有指定索引的位的value。

9 int hashCode()

此方法返回具有指定索引的位的value。

10 boolean intersects(BitSet set)

如果指定 BitSet 中有任何位設定為 true,並且在 此 BitSet 中也設定為 true,則此方法返回 true。

11 boolean isEmpty()

如果此 BitSet 不包含任何設定為 true 的位,則此方法返回 true。

12 int length()

此方法返回此 BitSet 的“邏輯大小”:BitSet 中最高設定位的索引加 1。

13 int nextClearBit(int fromIndex)

此方法返回在指定起始索引或之後出現的第一個設定為 false 的位的索引。

14 int nextSetBit(int fromIndex)

此方法返回在指定起始索引或之後出現的第一個設定為 true 的位的索引。

15 void or(BitSet set)

此方法執行此位集與位集引數的邏輯 OR。

16 int previousClearBit(int fromIndex)

此方法返回在指定起始索引或之前出現的第一個設定為 false 的位的索引。

17 int previousSetBit(int fromIndex)

此方法返回在指定起始索引或之後出現的第一個設定為 true 的位的索引。

18 void set(int bitIndex)

此方法將指定索引處的位設定為 true。

19 int size()

此方法返回此 BitSet 實際用於表示位值的位數。

20 IntStream stream()

此方法返回一個索引流,對於這些索引,此 BitSet 包含一個處於設定狀態的位。

21 byte[] toByteArray()

此方法返回一個新的位集,其中包含給定位元組陣列中的所有位。

22 long[] toLongArray()

此方法返回一個新的長整型陣列,其中包含此位集中的所有位。

23 String toString()

此方法返回此位集的字串表示形式。

24 static BitSet valueOf​(byte[] bytes)

此方法返回一個新的位集,其中包含給定位元組陣列中的所有位。

25 void xor(BitSet set)

此方法執行此位集與位集引數的邏輯 XOR。

繼承的方法

此類繼承自以下類:

  • java.util.Object

建立 BitSet 並對 BitSet 執行操作的示例

以下程式說明了 BitSet 資料結構支援的幾種方法:

import java.util.BitSet;
public class BitSetDemo {

  public static void main(String args[]) {
      BitSet bits1 = new BitSet(16);
      BitSet bits2 = new BitSet(16);
      
      // set some bits
      for(int i = 0; i < 16; i++) {
         if((i % 2) == 0) bits1.set(i);
         if((i % 5) != 0) bits2.set(i);
      }
     
      System.out.println("Initial pattern in bits1: ");
      System.out.println(bits1);
      System.out.println("\nInitial pattern in bits2: ");
      System.out.println(bits2);

      // AND bits
      bits2.and(bits1);
      System.out.println("\nbits2 AND bits1: ");
      System.out.println(bits2);

      // OR bits
      bits2.or(bits1);
      System.out.println("\nbits2 OR bits1: ");
      System.out.println(bits2);

      // XOR bits
      bits2.xor(bits1);
      System.out.println("\nbits2 XOR bits1: ");
      System.out.println(bits2);
   }
}

這將產生以下結果:

輸出

Initial pattern in bits1:
{0, 2, 4, 6, 8, 10, 12, 14}

Initial pattern in bits2:
{1, 2, 3, 4, 6, 7, 8, 9, 11, 12, 13, 14}

bits2 AND bits1:
{2, 4, 6, 8, 12, 14}

bits2 OR bits1:
{0, 2, 4, 6, 8, 10, 12, 14}

bits2 XOR bits1:
{}
廣告