gpt4 book ai didi

java - 如何从 char[] 数组转换为 BitSet

转载 作者:太空宇宙 更新时间:2023-11-04 08:40:36 24 4
gpt4 key购买 nike

我正在使用这个程序:

private static char[] toCharArray(final BitSet bs){    
final int length = bs.length();
final char[] arr = new char[length];
for(int i = 0; i < length; i++){
arr[i] = bs.get(i) ? '1' : '0';
}
return arr;
}

BitSet obj 转换为char[] 数组。现在,在对 char[] (添加一些零)数组进行一些修改后,我想将其转换回 BitSet obj。有什么办法吗...

最佳答案

好吧,不知道为什么要这样做,但为什么不反转你的方法呢?

private static BitSet toBitset(final char[] entries){
final int length = entries.length;
BitSet bs = new BitSet(length);
for(int i = 0; i < length; i++){
bs.set(i, entries[i] == '1');
}
return bs;
}

编辑:既然你似乎想修复你的方法,我只能想到一种方法强制 char 数组为特定大小,但您需要知道需要多少个零附加到末尾,所以我重写了您的方法,如下所示:

private static char[] toCharArray(final BitSet bs, int expectedBits){
if(expectedBits < bs.length()){
expectedBits = bs.length();
}
final char[] arr = new char[expectedBits];
for(int i = 0; i < expectedBits; i++){
arr[i] = bs.get(i) ? '1' : '0';
}
return arr;
}

使用 Bitmap 的问题是,它只存储“1”,因此 BitSet 中的最后一个条目将始终是“1”,并且长度将始终引用 BitSet 中的最后一个“1”。

例如:

 BitSet bs = new BitSet();
for(int i = 0; i < 1000; i++){
bs.set(i, false);
}
System.out.println(bs.length());

打印出“0”,而

BitSet bs = new BitSet();
bs.set(10001, true);
System.out.println(bs.length());

将打印出 10002。

这可能对您有帮助(但您需要相应地编辑上面的方法):

class FixedBitSet extends BitSet {

private int maxLength = 0;

public int maxLength(){
return maxLength;
}

@Override
public void set(int bitIndex, boolean value) {
super.set(bitIndex, value);
if(bitIndex > maxLength){
maxLength = bitIndex;
}
}

}

关于java - 如何从 char[] 数组转换为 BitSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5407859/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com