2012-05-08 23 views
7

複数のBitSetを簡単に連結できるBitSetが必要です。新しいBitSetを作成します。 default implementationにはこのような方法はありません。ビットセットの簡単な連結を可能にするJava BitSet

いくつかの外部ライブラリには、容易に連結できるものがあることを知っている実装がありますか?

例えば、私はビット配列11111と別のビット配列010101を持っているとしましょう。私は追加のような機能が必要です。接続後、11111010101になります。

+2

をのBitSetは(最上位セットビットを除く)意味のある大きさや長さを持っていないので、あなたが何を意味するか理解するのは少し難しいです連結して – jarnbjo

+0

@jarnbjo質問を編集しました。今、それは意味をなさないと思う。 –

+2

これは '連結'ではありません。それは左シフトとOR演算です。私はあなたの連結のバージョンの一貫した定義を思い付くことができるだろうと思う。例えば、あなたの例で '010101'の先行ゼロを観測し、他の先行ゼロの無限を無視する理由は? – EJP

答えて

3

左シフト方法がないので、この非常に効率的な(パフォーマンスメモリです)を実装する方法はありません。

できることはループが遅いのにメモリが効率的であることを明示的にnextSetBitとすることです。

toLongArrayを1つにコピーすると、十分に大きな配列に正しくコピーされ、それからビットセットを作成したり、もう一方のセットからビットセットを作成したりすることが考えられます。そうすれば、単一のビットでビットシフトを行うのではなく、ワード単位のチャンクで作業します。

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

関連する問題