亚洲Aⅴ无码Av红楼在线观看_国产午夜福利涩爱AⅤ_国产sm调教一区二区三区_精品人妻一区二区三区不卡毛片

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

Java教程 8.4.2 BitSet

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

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


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


BitSet 大于64 位,就會出現(xiàn)一些令人迷惑不解的行為。假如我們設(shè)置一個(gè)只比BitSet 當(dāng)前分配存儲空間大
出1 的一個(gè)位,它能夠正常地?cái)U(kuò)展。但一旦試圖在更高的位置設(shè)置位,同時(shí)不先接觸邊界,就會得到一個(gè)惱
人的違例。這正是由于BitSet 在Java 1.0 里不能正確擴(kuò)展造成的。本例創(chuàng)建了一個(gè)512 位的BitSet。構(gòu)建
器分配的存儲空間是位數(shù)的兩倍。所以假如設(shè)置位1024 或更高的位,同時(shí)沒有先設(shè)置位1023,就會在Java
1.0 里得到一個(gè)違例。但幸運(yùn)的是,這個(gè)問題已在Java 1.1 得到了改正。所以如果是為Java 1.0 寫代碼,
請盡量避免使用BitSet。

 



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

服務(wù)器租用/服務(wù)器托管中國五強(qiáng)!虛擬主機(jī)域名注冊頂級提供商!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ù)器/云主機(jī) 24小時(shí)售后服務(wù)電話:0371-60135900
  • 虛擬主機(jī)/智能建站 24小時(shí)售后服務(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小時(shí)客服服務(wù)熱線