2012-05-08 22 views
7

我需要一个BitSet,它允许简单串联多个BitSet创建一个新的BitSet。 default implementation没有这样的方法。爪哇BitSet,它允许简单串联的位集

在某些外部库中是否有任何实现可以让您轻松实现串联?

例如让我说我有一个bitarray 11111和另一个位阵列010101。我想要追加功能。因此,级联后将导致11111010101.

+2

由于BitSet中没有有意义的大小或长度(不包括最高设置位),它是很难一点点明白你的意思连接。 – jarnbjo

+0

@jarnbjo我编辑了这个问题。希望现在有意义。 –

+2

这不是'串联'。这是左移和OR-ing。我怀疑你能够拿出一个连贯的连接版本的定义。例如,为什么要在你的例子中观察'010101'中的前一个零,并忽略其他前导零的无穷大? – EJP

回答

3

那么没有办法实现这种非常有效的(性能内存),因为没有左移方法。

您可以做的是使用明显的nextSetBit for循环 - 速度慢,但内存有效。

假设更快的方法是在一个上使用toLongArray,正确地移入一个足够大的数组的副本,创建一个bitset,或者与另一个创建bitset。这样你就不会在单个位上进行任何移位操作,而是会在单词块上工作。

1

这为我工作:

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