簡體   English   中英

如何將值傳遞給BitSet類並創建包含BitSet值的列表?

[英]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()將其與intlong位掩碼一起使用

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM