私の現在のユースケースは非常に簡単で、可変または不変のMapでうまくいきます。
不変のマップを取得するメソッドがあります。このメソッドは、不変のマップも取得するサードパーティのAPIメソッドを呼び出します。
def doFoo(foo: String = "default", params: Map[String, Any] = Map()) {
val newMap =
if(someCondition) params + ("foo" -> foo) else params
api.doSomething(newMap)
}
問題のマップは一般に非常に小さく、多くてもケースクラスインスタンスのリストが埋め込まれている可能性があり、最大で数千のエントリがあります。したがって、この場合も、不変になることによる影響はほとんどないと想定します(つまり、newMap valコピーを介してマップのインスタンスが本質的に2つある)。
それでも、いくつかのk-> vエントリが追加された新しいマップを取得するためだけに、マップをコピーして、少し困惑します。
params.put("bar", bar)
タックしたいエントリに対して可変などを実行し、次にparams.toMap
api呼び出しに対して不変に変換することができます。これはオプションです。しかし、その後、可変マップをインポートして渡す必要があります。これは、Scalaのデフォルトの不変マップを使用する場合に比べて少し面倒です。
では、不変のマップよりも可変のマップを使用することが正当化/グッドプラクティスである場合の一般的なガイドラインは何ですか?
ありがとう
そのように編集 すると、不変マップでの追加操作にはほぼ一定の時間がかかり、完全なコピーが作成されないという@dhgと@Nicolasの主張を確認するように見えます。これにより、提示された具体的なケースの問題が解決されます。