Scala集合學習總結

codegeekgao發表於2018-09-28

遍歷集合可以使用迭代器iterator的那套迭代方式。Seq是一個有先後次序的序列,比如陣列或列表。IndexedSeq可以通過下標進行任意元素的訪問。例如ArrrayBuffer。
Set是一組沒有先後次序的值,在SortedSet中,元素以某種排過序的順序被訪問。
Map是一組(鍵,值)對偶,SortedMap按照鍵的順序訪問實體
Scala集合有三個基本操作:
head 返回集合第一個元素
tail 返回一個集合,包含除了第一元素之外的其他元素
isEmpty 在集合為空時返回true

  • 可變和不可變的集合
Scala同時支援可變的和不可變的集合,不可變的集合從不改變,因此不可變集合是執行緒安全的集合,例如有:scala.collection.mutable.Map,也有scala.collection.immutable.Map。它們有一個共有的超型別scala.collection.Map
Scala優先採用不可變集合。scala.collection包中的伴生物件產出不可變的集合例如:scala.collection.Map("hello" -> 42)是一個不可變的對映
  • 新增元素和移除元素的操作符

    1. 向後(:+)或向前(+:)追加元素到序列當中
    2. 新增(+)元素到無先後次序的集合中
    3. 用-移除元素
    4. 用++和–來批量新增和移除元素
    5. 對於列表優先使用::和:::
    6. 改值操作有+=,++=,-=,–=
    7. 對於集合,使用++,&和–
    8. 儘量不用++:,+=:和++=:
  def main(args: Array[String]): Unit = {
    // 初始化構建元素個數為4的集合物件
    val v = Vector(1, 2, 3, 4)
    // 新增集合後新增5(新建集合新增5)
    println(v :+ 5)
    // 集合前新增0(新建集合新增0)
    println(5 +: v)
    // 初始化構建高效陣列快取
    val array = ArrayBuffer(1, 2, 3, 4)
    // 新增元素5
    println(array += 5)
    // 刪除元素1
    println(array -= 1)
    // 初始化Set集合物件
    val number = Set(1, 2, 3)
    // 新增4元素(新建set集合新增4)
    println(number + 4)
    // 新增4元素(新建set集合移除3)
    println(number - 3)
    // 使用++新增多個set元素(結果為無序的)
    println(number ++ Set(4, 5, 6))
  }
}
可以使用++一次新增多個元素,也可以使用--一次刪除多個元素
  • 將函式對映到集合
    有時候可以對元素進行變換,map方法可以將某個函式應用到集合每個元素並進行相應的元素處理
    // 初始化建立List集合對映map
    val name = List("Bob", "Michael", "Marry")
    println(name.map(_.toUpperCase))
    val result = for (n <- name) yield n.toUpperCase
    println(result)
    // 拼接字串
    def unclase(string: String) = Vector(string.toLowerCase(), string.toUpperCase())
    println(name.flatMap(unclase))
  • 與java集合相互轉換
import scala.collection.JavaConversions._
需要手動匯入,在專案中發現不手動匯入這個,idea編輯器編譯器會報錯

常見轉換api

隱式函式 java集合型別
asjavaEnumeration Enumeration
setAsJavaSet Set
mapAsJavaMap Map
bufferAsJavaList List