实习字符串的最佳地图

时间:2016-04-29 12:50:37

标签: java collections

我有大量的实习字符串(具有少量可能的值,因此实际上是有意义的)我想要存储在Map中(用作计数器)。

TreeMap在树的每个级别进行比较,我想这将涉及字符的O(n)比较。 HashMap将使用哈希进行存储。

鉴于我有一小部分实习字符串,这意味着引用可用于相等或排序比较(因此既不需要使用哈希码也不需要使用值),我想知道是否有一个很好的 - 结构?

(或者确实是一种更适合计算的专业)

我的优先事项是速度和紧凑的表示(我处理大量数据)。

(为了阻止任何"过早优化"评论,我处理了大约2亿件物品。)

1 个答案:

答案 0 :(得分:3)

IdentityHashMap

java.util.IdentityHashMapHashMap类的工作方式类似,但使用标识相等==和哈希码(System.identityHashCode)来比较键。它还具有更小的内存占用,因为它只使用单个数组来存储键和值。尽管==的速度与native一样快,但System.identityHashCode(Object)方法有一个HashMap实现,它带来了一些开销(但它可能是一个JVM内在的)。

HashMap中

HashEntry实现虽然需要更多内存(String.equals s),但应该具有类似的哈希代码计算和相等性检查性能。这是因为String.hashCode方法首先检查引用相等,并且为每个String缓存HashMap。在“紧急”中,{{1}}方法也会为非缓存字符串生成正确的结果。在可维护性方面,这可能是更好的选择。