![](/img/trans.png)
[英]Intersection of Two HashMap (HashMap<Integer,HashSet<Integer>>) RDDs in Scala for Spark
[英]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不保護密鑰不被垃圾收集,這意味着當條目不再使用時會自動刪除,並且會發生一些垃圾收集。 如果內存不是問題,可以使用getOrElseUpdate
( getOrElseUpdate
也可用)。
使用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.