哈希多地图空间节省问题

时间:2012-03-24 17:24:10

标签: java java-ee hashmap hashtable guava

我在代码中使用HashMultiMap。现在,我的代码定期得到一些比特。我存储在一个字符串中(例如String str =“0110011100”)。然后将其转换为int并将其存储为我的HashMultiMap键/值。是否可以将其存储为位而不是将其存储为int / string?这样可以节省地图的空间吗?实际上,字符串的位数多于字节且小于int(比如说14位)。所以,我希望通过将其存储为位来节省空间。感谢。

1 个答案:

答案 0 :(得分:5)

Java有一个方便的BitSet类,它可以存储几乎无限数量的位。当位数很大时,这种表示是有意义的。然而,当比特数相对较小时,该表示将使用比整数更多的空间。

如果位数限制为32,则使用BitSet将会浪费。只有20位,您可以创建2^20个数组,并避免完全存储密钥。但这算是过早优化。

解决此问题的更好方法是从最方便的表示开始,符合您的应用程序设计逻辑。当应用程序工作时,分析其内存使用情况以确定是否需要优化位集的表示形式;更有可能的是,你不需要对此做任何事情,至少不是马上做的。