2012-10-20 3 views
5

W Javie, zgodnie z wykorzystaniem kolekcji, nie używamy tej samej implementacji (np. ArrayList vs LinkedList).Java -> Scala, performances on collections

Pochodząc z tła Java, czy ktoś może mi powiedzieć, co powinienem wiedzieć o kolekcjach Scala i kwestiach związanych z wydajnością?

Wygląda na to, że niezmienna wersja Scala List jest pewnego rodzaju niezmienną LinkedList. Rozumiem koncepcje po kursach Martina Odersky na Courserze. W ten sam sposób rozumiem, dlaczego bardziej wydajne jest poprzedzanie, niż dołączanie, szczególnie gdy masz niezmienną listę.

Chciałbym poznać wszystkie (lub większość) tego rodzaju podchwytliwe rzeczy dotyczące występów kolekcji Scala, więc nie znajduję tego na własnej skórze. Czy ktoś może mi pomóc?

Dzięki

+0

Polecam oglądanie [ten wykład] (http://www.infoq.com/presentations/Functional-Data-Structures-in-Scala) autorstwa Daniela Śpiewaka. Daje to świetny przegląd tego, jak scala ma porównywalną wydajność z Javą, zachowując niezmienną strukturę danych. – rjsvaljean

+1

To nie da ci dużo w środku, ale jako ogólny przegląd może ci się przydać [this] (http://www.scala-lang.org/docu/files/collections-api/collections_40.html). –

Odpowiedz

8

Jest to dokument, który describes collection performance characteristics. Poza tym naprawdę powinieneś przetestować swój przypadek użycia w microbenchmark. W niektórych przypadkach kolekcje Scala są bardzo zbliżone do wersji Java; w innych jest przerwa (np. mapy); w innych nie ma analogu Java, a niezmienne porównanie zmienne bardzo zależy od tego, w jaki sposób korzystasz z kolekcji (z oczywiście ciężką mutacją faworyzującą zmienne kolekcje i ciężkim ponownym użyciem/kopiowaniem faworyzującym niezmienne kolekcje).

1

To nie odpowiada konkretnie na twoje pytanie, ale do ogólnego użytku Nie sądzę, byś zauważył różnicę między kolekcjami java i scala. Nie zauważam tego przynajmniej :) Ogólnie uważam, że ludzie przedwcześnie optymalizują się, martwiąc się o tego rodzaju rzeczy (chociaż możesz mieć całkowicie poprawny przypadek użycia, dla którego potrzebujesz optymalizacji).

Osobiście wolę używać kolekcji scala niż kolekcji java ze względu na ich interfejsy API, a ponieważ nigdy nie miałem problemów z wydajnością, nigdy tak naprawdę nie analizowałem benchmarków java vs scala.

Jak mówi Rex, jeśli martwisz się tym (lub po prostu zastanawiasz się), przydatne będzie ustawienie testu porównawczego dla konkretnych przypadków użycia.

+0

W większości przypadków nie zauważam perf różnice między arraylist i linklist. Chcę tylko porównać Javę z Scalą w przypadku, gdy mam dużą listę z dużą ilością przeczytanych lub wielu zapisków :) –