複数のビットセットを簡単に連結して新しいビットセットを作成できるビットセットが必要です。デフォルトの実装にはそのようなメソッドはありません。
簡単に連結できる実装が外部ライブラリにありますか?
たとえば、ビット配列11111と別のビット配列010101があるとします。追加などの機能が必要です。したがって、連結すると、11111010101になります。
左シフト方式がないため、この非常に効率的な(パフォーマンスとメモリ)を実装する方法はありません。
あなたができることは、明らかなnextSetBit
forループを使用することです-遅いですが、メモリ効率が良いです。
おそらくより高速な方法はtoLongArray
、一方を使用し、それを十分に大きい配列に正しくシフトしたコピーを作成し、そこからビットセットを作成するか、もう一方を使用することです。そうすれば、単一ビットでビットシフトを行うのではなく、代わりにワード化されたチャンクで作業します。
これは私のために働いた:
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