2012-05-08 25 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