2016-10-26 1 views
-4

Was sind die Hauptunterschiede zwischen Java-Sammlungen und Scala-Sammlungen? Warum haben sich die Scala-Entwickler entschieden, eine ganze Reihe neuer Klassen zu erstellen, anstatt auf den bestehenden zu bauen?Warum haben Scala-Entwickler beschlossen, Java-Sammlungen neu zu implementieren?

+0

Die Frage ist, warum haben sie beschlossen, Scala-Sammlungen für 2,13 erneut zu implementieren? Wie gestellt, ein mögliches Duplikat von http: // stackoverflow.com/questions/1722726/is-the-scala-2-8-Sammlungen-Bibliothek-a-Fall-der-längsten-Suizid-Note-in-hist –

+0

Es gibt derzeit drei Implementierungen von Scala: Scala-JVM, Scala.js, Scala-nativ. In der Vergangenheit gab es auch Scala.NET. 3 dieser 4 können unmöglich Java Collections verwenden. –

Antwort

4

Java-Standardbibliothek hat keine unveränderlichen Datenstrukturen.

Scala enthält sowohl veränderbare als auch unveränderbare Datenstrukturen im Gegensatz zu Java, das (hauptsächlich) nur veränderbare Datenstrukturen hat.

Scala Collections bietet Interop zwischen veränderlichen und unveränderlichen Sammlungen. Unterstützt faule Sammlungen.

3

Für meine technischen nehmen, Vom scala-lang.org website, sagen sie:

Scala Bibliotheken setzen viel mehr Gewicht auf dem unveränderlichen Sammlungen und viele mehr Operationen zur Verfügung stellen, die eine Sammlung in einen neuen verwandeln.

Weitere Informationen für ein overview von scala Sammlungen. Auch, performance characteristics auf Scala-Sammlungen (ursprünglich gefunden von this SO post).

Wie viel von scala, die Sammlungen ist auch mehr implizit und deckt sich wiederholende Kesselplatte Code.

Die Scala cookbook erklärt auch mehr im Detail über nicht nur die Konvertierung von Java < -> Scala-Konvertierungen, sondern viele Aspekte von Scala und Java über eine größere Vielfalt von Code.

Bezüglich why kann ich keine definitiven Gründe behaupten, außer für mein eigenes einfaches logisches Verständnis davon: es ermöglicht der scala Sprache, in einer zusammenhängenden Art und Weise zu gedeihen, z. funktionale Programmierung, im Gegensatz zu Java und OOP. Diese Art von Bindung bindet auch die Antwort von @ Pamu ein.

2

Ein Teil der Antwort ist bereits durch die anderen Antworten gegeben (unveränderlich aka rein funktionale Datenstrukturen). Hier sind ein paar weitere Vorteile:

  • einfach zu Mustererkennung und rekursive Funktionen, z. unter Verwendung von head :: tail Zerlegung für List oder init :+ last Zerlegung für Sequenzen.
  • einfach zwischen den Sammlungen zu konvertieren, z. Sequenz zum Abbilden oder Einstellen und Zurück
  • leicht zu ändern von var und unveränderliche Variante zu val und veränderbare Variante (z. B. map += key -> value).
  • enthält eine große Anzahl von leicht verwendbaren Funktionen höherer Ordnung, wie map, groupBy, filter usw. Ich glaube nicht, dass Thesen in Java verfügbar sind (vielleicht in Java 8 mit Streams).
  • plattformunabhängig (arbeitet auf der JVM und in JS-Back-Ends, und wahrscheinlich auch in Scala Muttersprache)
  • spielen gut mit anderen Scala Typen wie Option (es gibt ein paar Ausnahmen, wo nur unsichere Methoden existieren, wie zum als max).
Verwandte Themen