位置:首頁 > Java技術 > Java教學 > Java BitSet類

Java BitSet類

BitSet 類創建一個特殊類型的數組保存位值。該BitSet中數組的大小可以根據需要增加。這使得它類似於比特的向量。

這是一個傳統類,但它已被完全重新設計在Java 2,1.4版本。

BitSet 定義了兩個構造函數。第一個版本創建一個默認的對象:

BitSet( )

Java2 版本允許指定它的初始大小,即比特,它可以容納的數量。所有位初始化為零。

BitSet(int size)

BitSet中實現了Cloneable接口,並定義在表中列出的方法:

SN Methods with 描述
1 void and(BitSet bitSet)
與運算調用的內容BitSet中對象與那些指定bitSet。結果存放到調用對象。
2 void andNot(BitSet bitSet)
對於bitSet每1位,在調用BitSet中的相應位清零。
3 int cardinality( )
返回設置位的調用對象的數量。
4 void clear( )
所有位清零。
5 void clear(int index)
index指定的位清零。
6 void clear(int startIndex, int endIndex)
將從startIndex到endIndex清零。
7 Object clone( )
重複調用BitSet中對象。
8 boolean equals(Object bitSet)
返回true如果調用位設置相當於一個在bitSet通過。否則,該方法返回false。
9 void flip(int index)
逆轉由index指定的位。 
10 void flip(int startIndex, int endIndex)
反轉將從startIndex位到endIndex.
11 boolean get(int index)
返回指定索引處的位的當前狀態。
12 BitSet get(int startIndex, int endIndex)
返回一個BitSet中,它包含的比特將從startIndex到endIndex.1。調用對象不被改變。
13 int hashCode( )
返回調用對象的哈希代碼。
14 boolean intersects(BitSet bitSet)
如果至少有一個對調用對象和bitSet內相應位為1,則返回true。
15 boolean isEmpty( )
返回true如果在調用對象中的所有位均為零。
16 int length( )
返回到持有調用BitSet中的內容所需的比特數。這個值是由最後1位的位置決定的。
17 int nextClearBit(int startIndex)
返回下個清零位的索引,(即,下一個零位),從由startIndex指定的索引開始
18 int nextSetBit(int startIndex)
返回下一組位(即,下一個1比特)的索引,從由startIndex指定的索引開始。如果冇有位被設置,則返回1。
19 void or(BitSet bitSet)
OR值調用的內容BitSet中對象,通過BitSet指定。結果被放置到調用對象。 
20 void set(int index)
設置由index指定的位。
21 void set(int index, boolean v)
設置由index指定在v. true為傳遞的值的位設置位,false則清除該位。
22 void set(int startIndex, int endIndex)
設置位將從startIndex到endIndex.1。
23 void set(int startIndex, int endIndex, boolean v)
設置位從startIndex到endIndex.1,在真正傳遞的值v設置位,清除位為false。
24 int size( )
返回位在調用BitSet中對象的數量。
25 String toString( )
返回字符串相當於調用BitSet中的對象。
26 void xor(BitSet 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("
Initial pattern in bits2: ");
     System.out.println(bits2);

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

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

     // XOR bits
     bits2.xor(bits1);
     System.out.println("
bits2 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:
{}