我有大量的字符串需要以非常紧凑的方式存储。目前我将字符串(32 个字符 a-f/0-9)存储在 HashSet<byte[]>
中。我只是调用.getBytes()
得到这个。
我的问题是,是否有更好的方法来将这些数据存储在哈希集中?
最佳答案
一个HashSet<byte[]>
无论如何都坏了,如 byte[]
不覆盖 equals()
或hashCode()
。调用getBytes()
不指定字符编码通常是一个坏主意 - 如果您只有十六进制数字可能没问题,但我仍然会尽可能避免它。
如果您的字符串始终是 32 个十六进制数字,则基本上是 16 个字节 - 您是否考虑过为此编写一个自定义集合,或者可能只是将它们封装在一个对象中?考虑到对于任何“普通”集合,您都必须有一个具有一些描述的对象来表示该元素,因此对象开销很难解决 - 尽管使用自定义集合您可以只拥有两个您保持同步的长整型数组。这将是您可能找到的最紧凑的表示形式,但只是一个带有两个 long
的对象。字段或四个 int
田野将是我的起点。然后你可以覆盖 hashCode
和equals
实际上得到 HashSet
处理值相等,而不仅仅是引用标识...并且每个元素使用的数据仍然少于 32 字节的字节数组。
关于java - 如何使用最少的内存在哈希集中存储字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7880467/