我需要一个BitSet,它允许简单串联多个BitSet创建一个新的BitSet。 default implementation没有这样的方法。爪哇BitSet,它允许简单串联的位集
在某些外部库中是否有任何实现可以让您轻松实现串联?
例如让我说我有一个bitarray 11111和另一个位阵列010101。我想要追加功能。因此,级联后将导致11111010101.
我需要一个BitSet,它允许简单串联多个BitSet创建一个新的BitSet。 default implementation没有这样的方法。爪哇BitSet,它允许简单串联的位集
在某些外部库中是否有任何实现可以让您轻松实现串联?
例如让我说我有一个bitarray 11111和另一个位阵列010101。我想要追加功能。因此,级联后将导致11111010101.
那么没有办法实现这种非常有效的(性能和内存),因为没有左移方法。
您可以做的是使用明显的nextSetBit
for循环 - 速度慢,但内存有效。
假设更快的方法是在一个上使用toLongArray
,正确地移入一个足够大的数组的副本,创建一个bitset,或者与另一个创建bitset。这样你就不会在单个位上进行任何移位操作,而是会在单词块上工作。
这为我工作:
BitSet concatenate_vectors(BitSet vector_1_in, BitSet vector_2_in) {
BitSet vector_1_in_clone = (BitSet)vector_1_in.clone();
BitSet vector_2_in_clone = (BitSet)vector_2_in.clone();
int n = 5;//_desired length of the first (leading) vector
int index = -1;
while (index < (vector_2_in_clone.length() - 1)) {
index = vector_2_in_clone.nextSetBit((index + 1));
vector_1_in_clone.set((index + n));
}
return vector_1_in_clone;
}
结果:11111010101
由于BitSet中没有有意义的大小或长度(不包括最高设置位),它是很难一点点明白你的意思连接。 – jarnbjo
@jarnbjo我编辑了这个问题。希望现在有意义。 –
这不是'串联'。这是左移和OR-ing。我怀疑你能够拿出一个连贯的连接版本的定义。例如,为什么要在你的例子中观察'010101'中的前一个零,并忽略其他前导零的无穷大? – EJP