圧縮sortedset 実装
-
26-10-2019 - |
質問
多数を保管する必要があります Long
aの値 SortedSet
空間効率の良い方法での実装。私はビットセットの実装を検討していて、発見しました Javaewah. 。ただし、APIは期待しています int
ではなく値 long
s。
誰かがこの問題を解決するための良い方法を提案したり、提案したりできますか?私は主にスペースの効率に関心があります。セットを構築すると、最小要素と最大要素に1回アクセスする必要があります。ただし、アクセス時間は大きな懸念事項ではありません(つまり、完全に走り回るエンコードされた実装では問題ありません)。
編集
実装が明確になるはずです する必要はない 実装します SortedSet
コレクションの最小要素と最大要素にアクセスできます。
解決
aを使用するtlongarrayListを使用できます long[]
その下。サポートします sort()
したがって、MinとMaxは最初と最後の値になります。
または、aを使用できます long[]
長さでこれを自分で行います。 ;)
これにより、生の値自体よりも約64バイトが使用されます。長い値の範囲についていくつかの仮定をすることができれば、よりコンパクトになることができます。たとえば、実際には48ビットに制限されている場合。
Longbufferの使用を検討する場合があります。メモリがマッピングされている場合、ヒープまたは直接メモリの使用を避けますが、自分でソートルーチンを実装することができます。
それらがクラスター化されている場合、あなたは一連の範囲としてデータを表すことができるかもしれません。範囲は、純粋なA -B、または開始値を持つビットセットである可能性があります。後では電話番号に適しています。 ;)
他のヒント
それが設定したかどうか、それとも通常のJCFと比較してどれだけ効率的かはわかりませんが、これを見てください。