Java教程 8.4.2 BitSet |
發(fā)布時間: 2012/8/17 17:28:16 |
BitSet 實際是由“二進制位”構(gòu)成的一個Vector。如果希望高效率地保存大量“開-關(guān)”信息,就應使用 演示了1.0 版本的錯誤: //: Bits.java // Demonstration of BitSet import java.util.*; public class Bits { public static void main(String[] args) { Random rand = new Random(); // Take the LSB of nextInt(): byte bt = (byte)rand.nextInt(); BitSet bb = new BitSet(); for(int i = 7; i >=0; i--) if(((1 << i) & bt) != 0) bb.set(i); else bb.clear(i); System.out.println("byte value: " + bt); printBitSet(bb); short st = (short)rand.nextInt(); BitSet bs = new BitSet(); for(int i = 15; i >=0; i--) if(((1 << i) & st) != 0) bs.set(i); else bs.clear(i); System.out.println("short value: " + st); printBitSet(bs); int it = rand.nextInt(); BitSet bi = new BitSet(); for(int i = 31; i >=0; i--) if(((1 << i) & it) != 0) bi.set(i); else bi.clear(i); System.out.println("int value: " + it); printBitSet(bi); // Test bitsets >= 64 bits: BitSet b127 = new BitSet(); b127.set(127);
System.out.println("set bit 127: " + b127); BitSet 大于64 位,就會出現(xiàn)一些令人迷惑不解的行為。假如我們設(shè)置一個只比BitSet 當前分配存儲空間大 出1 的一個位,它能夠正常地擴展。但一旦試圖在更高的位置設(shè)置位,同時不先接觸邊界,就會得到一個惱 人的違例。這正是由于BitSet 在Java 1.0 里不能正確擴展造成的。本例創(chuàng)建了一個512 位的BitSet。構(gòu)建 器分配的存儲空間是位數(shù)的兩倍。所以假如設(shè)置位1024 或更高的位,同時沒有先設(shè)置位1023,就會在Java 1.0 里得到一個違例。但幸運的是,這個問題已在Java 1.1 得到了改正。所以如果是為Java 1.0 寫代碼, 請盡量避免使用BitSet。
本文出自:億恩科技【mszdt.com】 |