我有大量的字符串需要以非常紧凑的方式存储。目前我在HashSet<byte[]>
中存储字符串(32个字符a-f / 0-9)。我只是打电话给.getBytes()
来得到这个。
我的问题是,有没有更好的方法将这些数据存储在哈希集中?
答案 0 :(得分:3)
HashSet<byte[]>
无论如何都被打破,因为byte[]
没有覆盖equals()
或hashCode()
。在没有指定字符编码的情况下调用getBytes()
通常是一个坏主意 - 如果你只有十六进制数字,它可能没问题,但我仍然会尽可能避免使用它。
如果你的字符串总是32个十六进制数字,那基本上是16个字节 - 你是否考虑为此编写自定义集合,或者可能只是将它们封装在一个对象中?鉴于对于任何“普通”集合,你必须有一个某些描述的对象来表示元素,对象开销很难解决 - 尽管使用自定义集合你可以只有两个你保持同步的longs数组。这将是您可能找到的紧凑的表示,但只有一个具有两个long
字段或四个int
字段的对象将是我的起点。然后,您可以覆盖hashCode
和equals
,实际上让HashSet
使用值相等而不仅仅是引用标识...并且您仍然会使用每个元素少于数据的数据32字节的字节数组。