Scala之集合Collection
阿新 • • 發佈:2017-08-13
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