2015-07-04 82 views
1

我正在開發Java(JDK 1.8)和操作BitSets。我遇到了一個奇怪的問題 。JAVA BitSet設置

我實例大小160的位集合喜歡:

BitSet example = new BitSet(160); 

我想用的尺寸()方法,該方法給出了位集的比特數來檢查尺寸。在文檔中說,具有int N參數的構造函數創建了一個N位的位集。

但是當我做與

example.size() 

後立即檢查大小我獲得價值

192 

我不明白爲什麼,沒有人穿過這種問題就來了? 鏈接到文件:http://docs.oracle.com/javase/7/docs/api/java/util/BitSet.html

+3

從DOC:_Creates有點一套它的初始大小**足夠大**通過顯式表示索引範圍在0位和nbits-1._ –

回答

5

這是因爲BitSet構造函數創建一個BitSet「它的初始大小足以明確表示」位由參數給出的範圍。所以實際size將是至少您給參數中的數字,但而不是必然等於該數字。

它尤其使用192的原因是,192是一個相當不錯的二進制數:64 * 3.

+0

好吧,我現在看到了,非常感謝你許多!所以我猜想沒有辦法創建一個包含構造函數中給定位數的位集。我將使用一個簡單的數組。 –

+0

@thiout_p爲什麼你需要一個*完全*特定大小的bitset?您是否確定您正在構建的程序的內存限制非常嚴格? –

+0

@RRedRobotHood這只是我必須實現一個模塊,這是一個塊,我想盡可能地堅持下去,但我會做其他事情。感謝您指出文檔中的重要詞語! –

0

由於位集合實際上是用長[]存儲0/1。

private void initWords(int nbits) { 
    words = new long[wordIndex(nbits-1) + 1]; 
}