簡體   English   中英

Scala HashSet或HashMap實現字符串的緩存?

[英]Scala HashSet or HashMap to implement a cache of Strings?

在我當前的代碼中,我看到很多字符串ID被緩存為:

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

這應該是一種高效的緩存這些唯一ID的方式,以便快速檢索,如 -

idMapping.get("ID1234")

如果它返回null然后等等等等。

有更好的替代方案嗎? 我很快就想到了HashSet,但我在Scala中找到了基於HashSet的緩存示例?

有人可以建議對上述設計進行改進嗎?

緩存的最佳數據結構是WeakHashMap。

在你的例子中:

val cache = new WeakHashMap[String, String]

/* … */

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

WeakHashMap不保護密鑰不被垃圾收集,這意味着當條目不再使用時會自動刪除,並且會發生一些垃圾收集。 如果內存不是問題,可以使用getOrElseUpdategetOrElseUpdate也可用)。

使用Set 如果它確實總是身份映射,那么完全沒有Map 由於創建了Option值,因此當您使用get ,它會消耗更多內存並且可能會更慢。 還檢查if (alreadyProcessed(key)) if (alreadyProcessed.get(key).nonEmpty)看起來比if (alreadyProcessed.get(key).nonEmpty)更好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM