1

在我当前的代码中,我看到很多字符串 ID 被缓存为:

val idMapping = MMap.empty[String, String]
idMapping.put("ID1234", "ID1234")

这应该是作为缓存这些唯一 ID 以便快速检索的一种高效方式,例如 -

idMapping.get("ID1234")

如果它返回null,那么等等等等。

有没有更好的选择?HashSet 很容易出现在我的脑海中,但我在 Scala 中发现很少基于 HashSet 的缓存示例?

有人可以建议对上述设计进行改进吗?

4

2 回答 2

3

用于缓存的最佳数据结构是 WeakHashMap。

在您的示例中:

val cache = new WeakHashMap[String, String]

/* … */

val value = cache.getOrElseUpdate(id, generate(id))

WeakHashMap 不保护键免于垃圾回收,这意味着条目不再使用时会被自动删除,并且会发生一些垃圾回收。如果内存不是问题,可以使用 mutable.HashMap 代替(getOrElseUpdate也可用)。

于 2013-09-24T15:33:25.007 回答
1

使用Set. 如果它真的总是一个恒等映射,那么 aMap是完全没有必要的。当您使用 时,它会消耗更多内存并且可能会更慢,get因为创建了Option值。还检查if (alreadyProcessed(key))只是看起来比if (alreadyProcessed.get(key).nonEmpty).

于 2013-09-25T06:47:36.870 回答