scala的多種集合的使用(1)之集合層級結構與分類

一、在使用scala集合時有幾個概念必須知道:

1.謂詞是什麼?

謂詞就是一個方法,一個函數或者一個匿名函數,接受一個或多個函數,返回一個Boolean值。

例如:下面方法返回true或者false,所以它是一個謂詞。

scala> def isEven(i: Int) = if(i % 2 ==0) true else false
isEven: (i: Int)Boolean

2.匿名函數是什麼?

匿名函數也被稱作函數自變量,作爲變量傳入把函數作爲參數的方法中,或者賦值給一個變量。

scala> (i: Int) => i % 2 ==0
res22: Int => Boolean = <function1>

scala> val list = List.range(1,10)
list: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9)

scala> val ebents = list.filter(_ % 2 == 0)
ebents: List[Int] = List(2, 4, 6, 8)

3.隱私循環是什麼?

在上面的例子中,filter方法包含一個循環,會遍歷集合裏的每個元素然後返回一個新的集合。

scala> for {
     | e <- list
     | if e % 2 ==0
     | }yield e
res23: List[Int] = List(2, 4, 6, 8)

二、集合的層級結構

1.集合類

  • traversable特質遍歷了整個集合,scaladoc說他實現了一個就foreach方法而言的所有集合的通用方法,這樣就可以反覆遍歷集合。
  • iterable特質定義了一個迭代器,可以一次循環一個集合元素的方式,但當用迭代器時,集合只允許被循環一次,因爲在迭代器的過程中每個元素都被改變了。

2.序列

序列分爲兩大類,索引序列和線性序列。

  • 索引序列意味着隨機存取是最高效的,比如讀取數組的元素,如arr(5000)。默認情況下,在scala2.10.x版本中,創建Vector式會認爲是一個索引序列。
    scala> val x = IndexedSeq(1,2,3)
    x: IndexedSeq[Int] = Vector(1, 2, 3)
  • 線性序列說明集合可以很方便的被分辨爲頭尾部分,並且用head、tail和isEmpty方法是很常見的。當創建一個LinearSeq時會創建一個list的列表。
    scala> val seq = scala.collection.immutable.LinearSeq(1,2,3)
    seq: scala.collection.immutable.LinearSeq[Int] = List(1, 2, 3)

 3.Map類

 

  • scala的Map是一個鍵值對的組合,其中鍵必須是唯一的。當只需要一個簡單的不可變的map時,可以新建一個而不需要import。
    scala> val m = Map(1 -> "a",2 -> "b")
    m: scala.collection.immutable.Map[Int,String] = Map(1 -> a, 2 -> b)
  • 可變的Map默認不在可變範圍,所以必須引用他來使用。
    scala> val m = collection.mutable.Map(1 -> "a",2 -> "b")
    m: scala.collection.mutable.Map[Int,String] = Map(2 -> b, 1 -> a)

4.Set類

 scala的set是沒有重複元素的集合。

  • 如果只需要不可變的集合,可以這樣創建,不需要import引入。
    scala> val set = Set(1,2,3)
    set: scala.collection.immutable.Set[Int] = Set(1, 2, 3)
  • 如果需要可變的集合,必須引用它,或者引用原路徑。
    scala> val set = collection.mutable.Set(1,2,3)
    set: scala.collection.mutable.Set[Int] = Set(1, 2, 3)

 三、選擇一個集合類

  1. scala通用序列集合
  2. 主要的不可變的序列集合類
  3. 主要的可變序列集合類

  4. 在API庫中常用的特質
  5. 常用到的map,包括可變和不可變的版本
  6. 常用set,包括可變和不可變的版本
  7. 別的集合類
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章