38

時間の不足、技術的な問題、それとも存在してはならない理由があるのでしょうか。

4

5 に答える 5

27

おそらく最終的に埋められるのは欠落しているケースです。そうしない理由はありません。場合によっては、不変ツリーよりもかなり高速になります(変更には不変ツリーを使用したlog(n)オブジェクトの作成が必要なため、可変ツリーで1つだけ)。


編集:そして実際には2.12で記入されました。

可変ツリーマップ

(対応するものSetもあります。)

于 2010-12-26T06:49:45.610 に答える
6

その間、JavaTreeMapを使用できます。これはまさに必要なものです。

val m = new java.util.TreeMap[String, Int]()
m.put("aa", 2)
m.put("cc", 3)
于 2012-02-23T07:55:29.313 に答える
6

その理由は、可変バリアントを使用しても大きなメリットが得られないためだと思います。他の回答で言及されているいくつかのケースは、たとえば既存の値を置き換える場合など、可変マップがもう少し効率的である可能性があります。可変バリアントは新しいノードの作成を節約しますが、複雑さは依然としてO(log n)です。 。

マップへの共有参照を保持する場合は、ImmutableMapAdaptor不変のマップを可変の構造にラップするを使用できます。

于 2012-10-23T16:38:15.840 に答える
2

TreeSetまた、それに相当する変更可能なものがないことにも気付くでしょう。これは、それらが共通の基本クラスを共有し、要素またはキーRedBlackの順序を維持する基礎となるデータ構造が赤黒木であるためです。このデータ構造についてはあまりよくわかりませんが、かなり複雑なので(挿入と削除は他のマップに比べてかなり費用がかかります)、変更可能なバリアントが含まれていないことに関係していると思います。Trees

基本的に、これはおそらく、基礎となるデータ構造が容易に変更できTreeMapないためです。それで、あなたの質問に答えるために、それは技術的な問題です。それは間違いなく実行できますが、そのユースケースはあまりありません。

于 2010-12-26T01:03:23.217 に答える
1

可変のパフォーマンス上の理由があるかもしれませんTreeMapが、通常、不変のマップは、可変のマップと同じように使用できます。varではなくに割り当てる必要がありvalます。HashMapこれは、可変および不変のバリアントを持つの場合と同じです。

val mh = collection.mutable.HashMap[Int, Int]()
var ih = collection.immutable.HashMap[Int, Int]()
mh += (1 -> 2)
ih += (1 -> 2)
mh // scala.collection.mutable.HashMap[Int,Int] = Map(1 -> 2)
ih // scala.collection.immutable.HashMap[Int,Int] = Map(1 -> 2)
于 2012-02-15T03:24:41.253 に答える