scala.mutable.Vector
trie structureに基づいているため、技術的にはjava.util.ArrayList
よりもはるかに複雑です。この複雑さは、共通接頭辞を共有するVector
の束よりも、接辞接尾辞を共有するList
の束がより軽くなる可能性があることを意味します。
このプロパティは、多くの場合、コレクションを取得し、そのコピーをちょっと修正した操作(多くの場合、stackなど)が多い機能的なスタイルを意味します。大きなVector
に追加すると、いくつかの新しいオブジェクトが生成され、List
(常に1)にプリペンドされます。
List
は非常に理解しやすく、理由は簡単です。ただ::
またはNil
です。 Vector
の実装はかなり隠されている
、それは"dirty" optimisationsを持っており、おそらくStream
がデフォルトSeq
の代わりList
になりたいdrops
ランダムHaskellの開発を最適化された隠しを指しseq extractors経由preferredly一致させることができました。 scalaz
恋人 - more some symmetric Sequenceをstd libにエクスポートします。
List
に基づいての選択を変更することはできません。結果はListBuffer
chosen newBuilder
implementationとなります。しかし、あなたがそう要約
object Seq extends SeqFactory[Seq] {
implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, Seq[A]] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]]
def newBuilder[A]: Builder[A, Seq[A]] = new VectorBuilder[A]
}
のような独自の同様のSeq
工場を書き込むことができます。
- リンクリストは、他の配列型は別ではるかに有用である可能性関数型言語では、歴史的に最も支配的なコレクション型
- ですドメイン
scala.Seq.apply
を別の汎用タイプに「切り替える」ことはできません。しかし、名前をSeq
で別のオブジェクトをインポートまたは作成することはできます。
私は個人的にVector(...)
フォームがよりも便利で簡潔であることがわかります。 Seq(...)
またはLinearSeq(...)
の代わりにList(...)
と同じです。
私の3つのポイントの答えを要約した3つの小数点を書くことができますか?私は(思う)あなたが言っていることを得ている(もう少しそれについて熟考しなければならない)が、実際の答えが私の質問にどのようなものか分からない。 – Make42