私はいくつかの記事を読んでいて、誰かがTrieMapがHashMapを使うのが望ましいと思う状況を提示できるかどうか疑問に思っていました。TrieMapの使用はいつ適切ですか?
TrieMapの使用に動機付けるアーキテクチャの決定は基本的にどのようなものでしょうか?
私はいくつかの記事を読んでいて、誰かがTrieMapがHashMapを使うのが望ましいと思う状況を提示できるかどうか疑問に思っていました。TrieMapの使用はいつ適切ですか?
TrieMapの使用に動機付けるアーキテクチャの決定は基本的にどのようなものでしょうか?
ドキュメントごと。 が安全にになることができる可変コレクションです。マルチスレッドアプリケーションで使用できます。
同時ハッシュトライまたはTrieMapハッシュアレイマッピングされたトライの
concurrent thread-safe lock-free
実装です。これは、 同時マップ抽象化を実装するために使用されます。それはparticularly scalable concurrent
の挿入 を持ち、操作を削除し、memory-efficient
です。これは、O(1)、アトミック、 のロックフリーのスナップショットをサポートしています。このスナップショットは、線形化可能なロックフリーサイズを実装するために使用され、 イテレータおよびクリア操作です。 (怠惰な)スナップショットを評価するコストは であり、スナップショット評価を水平にスケーラブルにします。
詳細については、以下を参照してください。http://lampwww.epfl.ch/~prokopec/ctries-snapshot.pdf
はまたそれがcaching
のために本当に素敵なAPIを持っています。 たとえば、異なる数の階乗を計算しなければならない場合があり、この結果を再利用する必要があります。
object o {
val factorialsCache = new TrieMap[Int, Int]()
def factorial(num: Int) = ??? // really heavy operations
def doWorkWithFuctorial(num: Int) = {
val factRes = factorialsCache.getOrElseUpdate(num, {
// we do not want to invoke it very often
factorial(num)
// this function will be executed only if there are no records in Map for such key
})
// start do some work `withfactRes`
factRes
}
}
ご注意 - 書き込み操作のために使用グローバル状態(キャッシュ)上記の機能が、それは並行スレッドでそれを使用するために絶対に安全です。データを失うことはありません。
あなたはscala.collection.concurrent.TrieMapを意味しますか? –