[英]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.