2016-11-22 81 views
0

我使用的是位集合類我的程序。 我需要一個inline聲明,如:的Java位集合初始化

BitSet bits1 = new BitSet(); //standard declaration 
bits1.set(0,2); 
bits1.set(4,6); 
System.out.println(bits1); //110011 

BitSet bits2 = BitSet.valueOf(new long[] {1,1,0,0,1,1}); //inline 
System.out.println(bits2); 

有了這個代碼,我試圖複製相同的位集合是在BITS1,在BITS2。 問題如下:打印和值是不同的。 位集我設置是110011.第一個打印出{0,1,4,5},它是正確的,因爲這是「好」的方式與索引打印位集合,第二個打印出{0,64 ,256,320}。 正如你所看到的第二個錯誤。我很確定內聯初始化是錯誤的,但我無法弄清楚如何解決這個問題。

+1

「長」有64位。如果你想使用'long []'構造函數,你需要將這些位打包在一起。 –

回答

4

陣列中的每個長代表64位。您只需要一個長度爲4位的集合:

BitSet bits2 = BitSet.valueOf(new long[] {0b110011}); 
System.out.println(bits2); 
// {0, 1, 4, 5} 
+0

這對我有用!還有一個問題:110011之前0b的含義是什麼?這是一種常數嗎? – user840718

+4

@ user840718它告訴編譯器讀取的數作爲[二進制字面值(https://docs.oracle.com/javase/8/docs/technotes/guides/language/binary-literals.html)。 – shmosel

+0

是否還有一個內置的方法可以打印出二進制文字中的BitSet? – user840718