2012-10-20 24 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,以防萬一我有一個很大的列表或大量的寫入:) –