国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Java中的BitSet

2019-11-18 13:22:07
字體:
供稿:網(wǎng)友

  BitSet實(shí)際是由“二進(jìn)制位”構(gòu)成的一個Vector。假如希望高效率地保存大量“開-關(guān)”信息,就應(yīng)使用BitSet。它只有從尺寸的角度看才有意義;假如希望的高效率的訪問,那么它的速度會比使用一些固有類型的數(shù)組慢一些。
  此外,BitSet的最小長度是一個長整數(shù)(Long)的長度:64位。這意味著假如我們預(yù)備保存比這更小的數(shù)據(jù),如8位數(shù)據(jù),那么BitSet就顯得浪費(fèi)了。所以最好創(chuàng)建自己的類,用它容納自己的標(biāo)志位。
  在一個普通的Vector中,隨我們加入越來越多的元素,集合也會自我膨脹。在某種程度上,BitSet也不例外。也就是說,它有時會自行擴(kuò)展,有時則不然。而且java的1.0版本似乎在這方面做得最糟,它的BitSet表現(xiàn)十分差強(qiáng)人意(Java1.1已改正了這個問題)。下面這個例子展示了BitSet是如何運(yù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.    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 b255 = new BitSet(65);
    b255.set(255);
    System.out.println("set bit 255: " + b255);
    BitSet b1023 = new BitSet(512);
  // Without the following, an exception is thrown
  // in the Java 1.0 implementation of BitSet:
  //  b1023.set(1023);
    b1023.set(1024);
    System.out.println("set bit 1023: " + b1023);
   }
   static void printBitSet(BitSet b) {
    System.out.println("bits: " + b);
    String bbits = new String();
    for(int j = 0; j < b.size() ; j++)
     bbits += (b.get(j) ? "1" : "0");
    System.out.println("bit pattern: " + bbits);
   }
  } ///:~
  
  隨機(jī)數(shù)字生成器用于創(chuàng)建一個隨機(jī)的byte、short和int。每一個都會轉(zhuǎn)換成BitSet內(nèi)相應(yīng)的位模型。此時一切都很正常,因?yàn)锽itSet是64位的,所以它們都不會造成最終尺寸的增大。但在Java 1.0中,一旦BitSet大于64位,就會出現(xiàn)一些令人迷惑不解的行為。假如我們設(shè)置一個只比BitSet當(dāng)前分配存儲空間大出1的一個位,它能夠正常地?cái)U(kuò)展。但一旦試圖在更高的位置設(shè)置位,同時不先接觸邊界,就會得到一個惱人的違例。這正是由于BitSet在Java 1.0里不能正確擴(kuò)展造成的。本例創(chuàng)建了一個512位的BitSet。構(gòu)建器分配的存儲空間是位數(shù)的兩倍。所以假如設(shè)置位1024或更高的位,同時沒有先設(shè)置位1023,就會在Java 1.0里得到一個違例。但幸運(yùn)的是,這個問題已在Java 1.1得到了改正。所以假如是為Java 1.0寫代碼,請盡量避免使用BitSet。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 兴安盟| 澄城县| 渝中区| 信丰县| 北辰区| 闵行区| 阿城市| 阿拉善左旗| 通道| 綦江县| 武隆县| 离岛区| 东莞市| 潼关县| 集安市| 栾川县| 阳高县| 当雄县| 徐汇区| 方城县| 磐安县| 永川市| 平舆县| 乡城县| 蓝田县| 罗江县| 儋州市| 浦江县| 莫力| 仪陇县| 读书| 德阳市| 昌黎县| 琼海市| 宜兴市| 东兰县| 介休市| 磴口县| 无极县| 耒阳市| 黑水县|