[英]How to pass values to BitSet Class and create list containing BitSet Values?
BitSet bits1 = new BitSet(00101010); System.out.println(bits1);
問題:為什么輸出返回{}。
List<BitSet> list = new ArrayList<BitSet>(); list.add(new BitSet(00010010)); list.add(new BitSet(10000001)); list.add(new BitSet(01000001)); System.out.println(test.orTogether(list));
無法將值傳遞給方法。 由於列表包含[{},{},{}]。
問題在於構造函數public BitSet(int)
不會占用位數,而是要存儲的位數。 因此,內容仍然為空...
要設置位,可以創建一個額外的方法:
public BitSet createBitSet(String bits)
{
int len = bits.length();
BitSet bs = new BitSet(len);
for (int i = 0; i < len; i++)
{
bs.set(len - i - 1, bits.charAt(i) == '1');
}
return bs;
}
接着:
list.add(createBitSet("00010011"));
(我沒有測試該方法,所以它們可能有一些錯誤...)
要構造您的BitSet對象,您可能希望使用類似於以下方法:
static BitSet createBitSetFromString( String s ) {
BitSet ret = new BitSet( s.length );
for( int i = 0 ; i < s.length() ; i++ ){
if( s.charAt( i ) == '1' ) {
ret.set( s.length() - 1 - i ) ;
}
}
return ret ;
}
然后,代替
BitSet bits1 = new BitSet(00101010);
你可以做:
BitSet bits1 = createBitSetFromString( "00101010" ) ;
這是一個簡單的工廠方法,用於從二進制輸入String創建一個BitSet
(我從mine的上一個答案中復制了它):
public static BitSet createBitset(final String input){
final int length = input.length();
final BitSet bitSet = new BitSet(length);
for(int i = length - 1; i >= 0; i--){
// anything that's not a 1 is a zero, per convention
bitSet.set(i, input.charAt(i) == '1');
}
return bitSet;
}
您還可以通過使用toBinaryString()
將其與int
或long
位掩碼一起使用
int someInt = 1234567;
long someLong = 1234567890L;
BitSet bitSetFromInt =
createBitset(Integer.toBinaryString(someInt));
BitSet bitSetFromLong =
createBitset(Long.toBinaryString(someLong));
System.out.println(bitSetFromInt);
System.out.println(bitSetFromLong);
輸出:
{0、3、5、6、8、10、11、13、18、19、20}
{0,3,6,7,10,12,13,21,23,24,26,29}
從BitSet文檔中 :
BitSet(int nbits)創建一個位集合,其初始大小足夠大,以明確表示索引范圍為0到nbits-1的位。
您需要正確初始化BitSet(例如01001
):
BitSet bs = new BitSet(5);
bs.set(0, true);
bs.set(3, true);
BitSet構造函數采用一個int值,該值是初始大小,而不是二進制數。 您需要像這樣設置位:
bitset.set(2);
bitset.set(4);
bitset.set(6);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.