国产福利在线播放|久久精品福利网站免费|国产呻吟视频在线观看|日韩一区二区三区免费高清|久996视频精品免费观看|欧美日本在线一区二区三区|在线最新无码经典无码免費資訊|国产午夜亚洲精品国产成人最大

始創(chuàng)于2000年 股票代碼:831685
咨詢熱線:0371-60135900 注冊有禮 登錄
  • 掛牌上市企業(yè)
  • 60秒人工響應(yīng)
  • 99.99%連通率
  • 7*24h人工
  • 故障100倍補償
全部產(chǎn)品
您的位置: 網(wǎng)站首頁 > 幫助中心>文章內(nèi)容

Java教程 8.4.2 BitSet

發(fā)布時間:  2012/8/17 17:28:16

BitSet 實際是由“二進制位”構(gòu)成的一個Vector。如果希望高效率地保存大量“開-關(guān)”信息,就應(yīng)使用
BitSet。它只有從尺寸的角度看才有意義;如果希望的高效率的訪問,那么它的速度會比使用一些固有類型
的數(shù)組慢一些。
此外,BitSet 的最小長度是一個長整數(shù)(Long)的長度:64 位。這意味著假如我們準備保存比這更小的數(shù)
據(jù),如8 位數(shù)據(jù),那么BitSet 就顯得浪費了。所以最好創(chuàng)建自己的類,用它容納自己的標志位。
在一個普通的Vector 中,隨我們加入越來越多的元素,集合也會自我膨脹。在某種程度上,BitSet 也不例
外。也就是說,它有時會自行擴展,有時則不然。而且Java 的1.0 版本似乎在這方面做得最糟,它的
BitSet 表現(xiàn)十分差強人意(Java1.1 已改正了這個問題)。下面這個例子展示了BitSet 是如何運作的,同時


演示了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 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);
}
} ///:~
隨機數(shù)字生成器用于創(chuàng)建一個隨機的byte、short 和int。每一個都會轉(zhuǎn)換成BitSet 內(nèi)相應(yīng)的位模型。此時
一切都很正常,因為BitSet 是64 位的,所以它們都不會造成最終尺寸的增大。但在Java 1.0 中,一旦


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。

 



本文出自:億恩科技【www.riomediacenter.com】

服務(wù)器租用/服務(wù)器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM]

  • 您可能在找
  • 億恩北京公司:
  • 經(jīng)營性ICP/ISP證:京B2-20150015
  • 億恩鄭州公司:
  • 經(jīng)營性ICP/ISP/IDC證:豫B1.B2-20060070
  • 億恩南昌公司:
  • 經(jīng)營性ICP/ISP證:贛B2-20080012
  • 服務(wù)器/云主機 24小時售后服務(wù)電話:0371-60135900
  • 虛擬主機/智能建站 24小時售后服務(wù)電話:0371-60135900
  • 專注服務(wù)器托管17年
    掃掃關(guān)注-微信公眾號
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 億恩科技 版權(quán)所有  地址:鄭州市高新區(qū)翠竹街1號總部企業(yè)基地億恩大廈  法律顧問:河南亞太人律師事務(wù)所郝建鋒、杜慧月律師   京公網(wǎng)安備41019702002023號
      0
     
     
     
     

    0371-60135900
    7*24小時客服服務(wù)熱線