scala.mutable.Vector
basierend auf trie structure so ist es technisch sehr viel komplexer als java.util.ArrayList
. Diese Komplexität bedeutet, dass mehrere gemeinsame List
s Commong-Suffixe leichter sein können als mehrere Vector
s, die gemeinsame Präfixe haben.
Diese Eigenschaft bedeutet viel im funktionalen Stil, wo Sie oft eine Menge Operationen haben, die Sammlung nehmen und ihre Kopie nur ein bisschen zurückgeben, wie stack. Das Anhängen an große Vector
könnte mehrere neue Objekte erzeugen, die auf List
vorbereiteten - immer eine.
List
ist sehr einfach zu verstehen und zu begründen. Es ist nur ::
oder Nil
.
Implementierung von Vector
ist ziemlich versteckt, hat es "dirty" optimisations und konnte preferredly über seq extractors abgestimmt werden, die versteckt wahrscheinlich drops
Zufalls Haskell Entwickler optimiert verweist will Stream
Standard Seq
statt List
sein. Einige scalaz
Liebhaber - will more some symmetric Sequence in Std. Lib exportiert.
Sie können nicht Wahl von scala.Seq.apply
ändern becasuse es basierend auf List
als Ergebnis von ListBuffer
chosen newBuilder
implementation. Allerdings können Sie Ihre eigene ähnliche Seq
Fabrik wie
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]
}
So zusammenfassend schreiben:
- verlinkte Liste ist historisch dominierender Kollektionstyp in funktionalen Sprachen
- Ein weiterer Sequenztyp in einer anderen viel nützlicher sein könnte Domäne
- Sie können
scala.Seq.apply
nicht zu einem anderen generischen Typ "wechseln". Aber kann ein anderes Objekt unter dem Namen Seq
importieren oder erstellen.
Ich persönlich finde Vector(...)
Form nützliche und prägnant als . Dasselbe gilt für List(...)
anstelle von Seq(...)
oder LinearSeq(...)
.
Könnten Sie drei kleine nummerierte Punkte schreiben, die die Antworten für meine drei Punkte zusammenfassen? Ich denke, ich verstehe, was du sagst (denke darüber ein wenig nach), bin mir aber nicht sicher, was die Antworten auf meine Fragen sind. – Make42