2012-03-24 29 views
3

私のコードにHashMultiMapを使用しています。今、私のコードは定期的にいくつかのビットを取得しています。私は文字列に格納します(例:String str = "0110011100")。そしてそれをintに変換し、それを私のHashMultiMapキー/値として保存します。 int/stringとして格納する代わりに、ビットとして格納することは可能ですか?その方法は地図のスペースを節約しますか?実際には、文字列はバイトより多く、intより小さい(例えば14ビット)。だから、私はビットとして格納することでスペースを節約したい。ありがとう。ハッシュマルチマップスペース節約問題

+0

保存しようとしているビットのうち、最も高いビット数は何ですか?私は、値が 'int'に収まるので、常に32未満であると仮定しますが、それは16より小さいでしょうか? – dasblinkenlight

+0

@dasblinkenlight、まさに。常に32ビット未満で固定(元々は20ビット)されます。 – Arpssss

+0

メモリの記憶を気にしているならば、 'HashMultimap'はあなたの懸念事項の中で一番小さいものです。まず' String'を使うと、それを避けることができれば、すべてが単独で失敗モードになります。 –

答えて

5

Javaは便利なBitSetクラスを持ち、実質的に無制限のビット数を格納できます。ビット数が大きい場合、この表現は意味をなさない。しかし、ビット数が比較的少ない場合、この表現は整数より多くの空間を使用することになる。

ビット数が32に制限されている場合、BitSetを使用すると無駄になります。 20ビットだけでは、2^20の配列を潜在的に作成でき、キーの格納を完全に避けることができます。しかし、これは時期尚早の最適化とみなされます。

この問題にアプローチするより良い方法は、アプリケーション設計を論理的に適合させるという最も便利な表現から始めてください。アプリケーションが動作しているときに、メモリ使用量をプロファイルして、ビットセットの表現を最適化する必要があるかどうかを判断します。あなたがそれについて何かする必要はありません。少なくとも、すぐにはそうはなりません。