如何使用最少的内存来将字符串存储在哈希集中

时间:2011-10-24 18:59:25

标签: java

我有大量的字符串需要以非常紧凑的方式存储。目前我在HashSet<byte[]>中存储字符串(32个字符a-f / 0-9)。我只是打电话给.getBytes()来得到这个。

我的问题是,有没有更好的方法将这些数据存储在哈希集中?

1 个答案:

答案 0 :(得分:3)

HashSet<byte[]>无论如何都被打破,因为byte[]没有覆盖equals()hashCode()。在没有指定字符编码的情况下调用getBytes()通常是一个坏主意 - 如果你只有十六进制数字,它可能没问题,但我仍然会尽可能避免使用它。

如果你的字符串总是32个十六进制数字,那基本上是16个字节 - 你是否考虑为此编写自定义集合,或者可能只是将它们封装在一个对象中?鉴于对于任何“普通”集合,你必须有一个某些描述的对象来表示元素,对象开销很难解决 - 尽管使用自定义集合你可以只有两个你保持同步的longs数组。这将是您可能找到的紧凑的表示,但只有一个具有两个long字段或四个int字段的对象将是我的起点。然后,您可以覆盖hashCodeequals,实际上让HashSet使用值相等而不仅仅是引用标识...并且您仍然会使用每个元素少于数据的数据32字节的字节数组。