1. 程式人生 > >Scala之集合Collection

Scala之集合Collection

sina pat ret col filter mat transform str val

概述

Scala的集合類能夠從三個維度進行切分:

  • 可變與不可變集合(Immutable and mutable collections)
  • 靜態與延遲載入集合 (Eager and delayed evaluation )
  • 串行與並行計算集合(Sequential and parallel evaluation )

關於第一個維度我想我們不須要再介紹了。

關於第二維度。是這樣解釋的, 首先我們來解釋一個概念:transformation,集合中有大量的操作都是把一個集合“轉換”成還有一個集合,比方map,filter等等。而Eager和Delayed集合的差別在於:Eager集合總是馬上為元素分配內存,當遇到一個transform動作時,Eager的集合會直接計算並返回結果。而Delayed集合則會盡可能晚的推遲運行。直到必須返回結果時才去運行。

這一點和Spark RDD操作中的transformation和action非常相似。

在現有的集合裏,僅僅有Stream是Lasy的。全部其它的集合都是靜態(Eager)載入的。

可是你能夠非常easy地把一個靜態集合轉換成lazy的。那就是創建一個view。

集合類型總覽

技術分享

Immutable Collection

Immutable Seq

Seq主要分兩大類:indexed sequences和linear sequences,indexed sequences暗示本類集合在隨機讀取方面有較高的性能(相似數據結構中的數組)。linear sequences暗示本類集合在head和tail操作和順序遍歷上更有優勢(相似於數據結構中的雙向列表)
技術分享

在使用Seq時,默認使用的詳細類是List, 使用IndexedSeq時默認使用的詳細類是Vector.

scala> val seq = Seq(1,2,3)
seq: Seq[Int] = List(1, 2, 3)

scala> val indexedSeq = IndexedSeq(1,2,3)
indexedSeq: IndexedSeq[Int] = Vector(1, 2, 3)

Immutable Set

技術分享

Immutable Map

技術分享

Mutable Seq

技術分享

怎樣選擇集合類

各種Immutable Sequence的特性比較

技術分享

各種Mutable Sequence的特性比較

技術分享

各種Map的特性比較

技術分享

各種Set的特性比較

技術分享

註: 本文類圖參考自《Beginning Scala》, 表格參考自《Scala Cookbook》

相關閱讀

Scala之模式匹配(Patterns Matching)

Scala之Partially Applied Function和Currying

Scala之偏函數Partial Function

Scala之Case Class

Scala之主構造函數

Scala之隱式轉換

Scala之集合Collection