我需要一個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