Latest web development tutorials

Java Bitset類

一個Bitset類創建一種特殊類型的數組來保存位值。 BitSet中數組大小會隨需要增加。 這和位向量(vector of bits)比較類似。

這是一個傳統的類,但它在Java 2中被完全重新設計。

BitSet定義了兩個構造方法。

第一個構造方法創建一個默認的對象:

BitSet()

第二個方法允許用戶指定初始大小。 所有位初始化為0。


BitSet(int size)

BitSet中實現了Cloneable接口中定義的方法如下表所列:

序號 方法描述
1 void and(BitSet bitSet)
對此目標位set 和參數位set 執行邏輯與操作。
2 void andNot(BitSet bitSet)
清除此 BitSet 中所有的位,其相應的位在指定的 BitSet 中已設置。
3 int cardinality( )
返回此 BitSet 中設置為 true 的位數。
4 void clear( )
將此BitSet 中的所有位設置為 false。
5 void clear(int index)
將索引指定處的位設置為 false。
6 void clear(int startIndex, int endIndex)
將指定的 fromIndex(包括)到指定的 toIndex(不包括)範圍內的位設置為 false。
7 Object clone( )
複製此 BitSet,生成一個與之相等的新 BitSet。
8 boolean equals(Object bitSet)
將此對象與指定的對象進行比較。
9 void flip(int index)
將指定索引處的位設置為其當前值的補碼。
10 void flip(int startIndex, int endIndex)
將指定的 fromIndex(包括)到指定的 toIndex(不包括)範圍內的每個位設置為其當前值的補碼。
11 boolean get(int index)
返回指定索引處的位值。
12 BitSet get(int startIndex, int endIndex)
返回一個新的 BitSet,它由此 BitSet 中從 fromIndex(包括)到 toIndex(不包括)範圍內的位組成。
13 int hashCode( )
返回此位set 的哈希碼值。
14 boolean intersects(BitSet bitSet)
如果指定的 BitSet 中有設置為 true 的位,並且在此 BitSet 中也將其設置為 true,則返回ture。
15 boolean isEmpty( )
如果此 BitSet 中沒有包含任何設置為 true 的位,則返回ture。
16 int length( )
返回此 BitSet 的"邏輯大小":BitSet 中最高設置位的索引加1。
17 int nextClearBit(int startIndex)
返回第一個設置為 false 的位的索引,這發生在指定的起始索引或之後的索引上。
18 int nextSetBit(int startIndex)
返回第一個設置為 true 的位的索引,這發生在指定的起始索引或之後的索引上。
19 void or(BitSet bitSet)
對此位set 和位set 參數執行邏輯或操作。
20 void set(int index)
將指定索引處的位設置為 true。
21 void set(int index, boolean v)
將指定索引處的位設置為指定的值。
22 void set(int startIndex, int endIndex)
將指定的 fromIndex(包括)到指定的 toIndex(不包括)範圍內的位設置為 true。
23 void set(int startIndex, int endIndex, boolean v)
將指定的 fromIndex(包括)到指定的 toIndex(不包括)範圍內的位設置為指定的值。
24 int size( )
返回此 BitSet 表示位值時實際使用空間的位數。
25 String toString( )
返回此位set 的字符串表示形式。
26 void xor(BitSet bitSet)
對此位set 和位set 參數執行邏輯異或操作。

實例

下面的程序說明這個數據結構支持的幾個方法:

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:
{}