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?
Antwort
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.
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.
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ürList
oderinit :+ 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 zuval
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 alsmax
).
- 1. Angular - Konstante Variable Beschlossen Bedingtes
- 2. PyQt - Wie QAbstractTableModel Sortierung neu zu implementieren?
- 3. Wie konfiguriere Checkpoint, um Spark-Streaming-Anwendung neu zu implementieren?
- 4. Wie die "alle" Funktion in Haskell neu zu implementieren?
- 5. Warum implementieren wir Schnittstellen?
- 6. Warum mit Initializern zu tun haben? (.net)
- 7. Warum haben Übersteuerungsfunktionen kein Absenderobjekt?
- 8. Warum haben re.match()?
- 9. Warum Fragment Standardkonstruktor haben?
- 10. Warum haben mehrere Parser?
- 11. Javascript-Funktion führt zu HTML-Seite neu laden: warum?
- 12. Warum ist neu (*) [2] verboten?
- 13. Warum definiert GLib Typen neu?
- 14. Gibt es eine Möglichkeit, __stack_chk_fail zu überladen oder neu zu implementieren?
- 15. Warum ist es effizienter, log_sum so zu implementieren?
- 16. Warum sollte das ViewModel INotifyPropertyChanged implementieren?
- 17. Wie zu implementieren INotifyPropertyChanged
- 18. Warum haben Quaternions vier Variablen?
- 19. Warum implementieren Java-Standardbibliotheken toString-Methoden nicht?
- 20. Warum haben Arrays in Go?
- 21. Warum startet meine Catalyst-Anwendung langsam neu?
- 22. Warum haben Methoden keine Referenzgleichheit?
- 23. Warum meine Divs Leerzeichen haben
- 24. wie JavaScript-Vererbung zu implementieren
- 25. Keine Notwendigkeit, den Server neu zu starten, nachdem Sie Änderungen in HTML oder Javascript vorgenommen haben. Warum?
- 26. Muss IPEndpoint neu erstellt werden und warum?
- 27. EmptyStackException beim Versuch, Comparator zu implementieren
- 28. Warum haben Bootstrap-Registerkarten role = "presentation"?
- 29. Fehler beim neu zugewiesenen Funktionsaufruf, warum?
- 30. Warum haben primitive Typen in C# ihre eigenen Operationen?
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 –
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. –