2012-10-20 21 views
5

在Java中,根据集合的用法,我们不使用相同的实现(即ArrayList vs LinkedList)。Java - > Scala,关于集合的表演

来自Java的背景,有人可以告诉我我应该知道哪些关于Scala集合和性能方面的考虑?

看来Scala List的不可变版本是某种不可变的LinkedList。 我了解Coursera的Martin Odersky课程后的概念。 以同样的方式,我明白为什么它比prepend更有效率,特别是当你有一个不变的列表。

我想知道关于Scala收藏表演的所有这些棘手的事情(或大多数),这样我就不会觉得自己很难。有人能帮我吗?

感谢

+0

我推荐Daniel Spiewak观看[本次演讲](http://www.infoq.com/presentations/Functional-Data-Structures-in-Scala)。它非常全面地介绍了scala如何在保持数据结构不可变的同时,具有与Java相媲美的性能。 – rjsvaljean

+1

它不会给你很多内容,但作为一般概述,您可能会发现[this](http://www.scala-lang.org/docu/files/collections-api/collections_40.html)有用。 –

回答

8

有一个文件,describes collection performance characteristics。除此之外,你真的应该在微基准测试中测试你的用例。在某些情况下,Scala的集合在性能上与Java的非常接近;在其他国家有差距(例如地图);在其他人中没有Java模拟器,而且不可变与可变比较非常依赖于你如何使用集合(显然,重型突变有利于可变集合,以及大量重用/复制有利于不可变集合)。

1

这并不是专门回答你的问题,但对于一般用途,我不认为你会注意到java和scala之间的区别。我没有注意到它至少:)总的来说,我认为人们通过担心这些事情过早地进行优化(尽管您可能需要一个完美有效的用例来优化)。我个人更喜欢使用java集合,因为他们的API,因为我从来没有过性能问题,我从来没有真正考虑过java vs scala基准测试。正如雷克斯所说,如果你担心它(或者只是想知道),那么为你的具体用例设置一个基准将会很有用。

+0

在大多数情况下,我甚至没有注意到arraylist和链表之间的性能差异。我只是想比较Java与Scala,以防万一我有一个很大的列表或大量的写入:) –