【《快學Scala》筆記】
1、定長數組
聲明數組的兩種形式:
- 聲明指定長度的數組 val 數組名= new Array[類型](數組長度)
- 提供數組初始值的數組,無需new關鍵字
Scala聲明數組時,需要帶有Array類名,且使用 () 來指明長度或提供初始值序列。
在JVM中,Scala的Array以Java數組的方式實現。如arr在JVM中的類型對應java.lang.String[],charArr對應char[]。
2、變長數組
ArrayBuffer,全稱scala.collection.mutable.ArrayBuffer,類似於Java中的ArrayList和C++中的vector,是長度可變數組類型的結構,稱為數組緩沖。
通過:val 名 = ArrayBuffer[類型]() 來聲明,聲明ArrayBuffer時需要指明類型。
通過 += 操作符來添加元素或序列,++= 操作符來拼接數組。
【在ArrayBuffer的尾端添加或刪除元素是一個高效的操作。】 ArrayBuffer還支持在指定位置插入、刪除元素。
ArrayBuffer到數組的轉換: toArray方法
3、數組遍歷
通過for循環來遍歷數組
指定遍歷數組的步長——通過until(上界, 步長)
通過reverse函數逆序遍歷數組:
4、可以通過 for循環+yield 來獲得新的數組或ArrayBuffer
通過for+yield操作數組或ArrayBuffer之后將得到新的數組或ArrayBuffer。
5、操作數組/數組緩沖常用函數
求和、求最大最小值、數組排序。通過sorted函數對數組或ArrayBuffer排序時,返回的是一個新的數組或ArrayBuffer,原有的不變。
可以直接對數組調用排序算法,但是不能對ArrayBuffer排序。
quickSort是直接修改原數組,而sorted方法是返回新數組。
6、多維數組
Scala中的多維數組同Java中一樣,多維數組都是數組的數組。
- 通過 Array.ofDim[類型](維度1, 維度2, 維度3,....)來聲明多維數組,如聲明二維數組;
從二維數組的初始化中,我們可以看到,多維數組在Scala中也是數組的數組。
- 通過 Array[ Array[Int]](維度1) 來聲明數組,可以聲明不規則數組;
多維數組是數組的數組,按照這種性質來聲明多維數組,如例子中的二維數組,聲明時,需要指定最外圍的數組大小。
【注:可以通過scala.collection.JavaConversions包中隱式轉換方法來實現Scala容器類與Java中類的轉換。】
1、映射構造
對偶,即名值對。可以通過 -> 操作符來定義對偶, 名->值 運算的結果是( 名, 值 );
也可以聲明對偶形式的變量:
映射是由對偶構成的,映射是對偶的集合。
- 聲明不可變映射,直接使用Map來聲明時,默認是不可變映射類型。
【注: 不可變映射維持元素插入順序。】
- 聲明可變映射(scala.collection.mutable.Map)
【注:放入可變映射中的值並未按照放入順序來排序的。】
通過for循環來修改可變Map中的值;
【注:映射可變、不可變指的是整個映射是否可變,包括元素值、映射中元素個數、元素次序等。】
- 聲明空映射
直接通過 new Map[類型1, 類型2]() 來定義映射會報錯,因為Map是抽象的,無法實例化。
定義空映射時,需要指定映射的實現類,通過new來定義;
分別定義不可變映射與可變映射。注,直接使用 new HashMap定義時會報錯。
2、映射常用操作
- 判斷映射中是否含有某個鍵: map.contains(鍵值)
- 使用 += 向可變映射中添加元素或拼接映射:
- 使用 -= 移除可變映射中的鍵及對應元素
- 不可變映射可通過 + 操作符返回一個新的不可變映射;不可變映射可通過 - 操作符返回一個新的不可變映射;
- 映射遍歷
- 獲取映射的鍵集合keySet和值集合
通過映射的 keySet 方法可以獲得映射的由鍵值構成的集合;通過 values 方法可以獲得映射的值集合的Interable對象,應用於循環中。
Scala的keySet / values 方法類似於Java中的映射方法。
3、Scala中映射的底層實現要么基於哈希表,要么基於平衡樹,其中基於平衡樹的映射內部是有序的。
Scala目前基於平衡樹的映射只提供了不可變版本。
【注:構建可變有序映射可借助Java的TreeMap。】
4、可變映射中,若要構建維持元素插入順序的映射可通過LinkedHashMap。
5、通過scala.collection.JavaConversions.mapAsScalaMap可將Java的Map轉換為Scala類型的Map;通過scala.collection.JavaConversions.mapAsJavaMap可將Scala的映射轉換為Java類型的映射。
6、toMap方法
使用toMap方法可將對偶組成的集合轉化為映射。
1、元組是不同類型的值的聚集;對偶是最簡單的元組。
2、元組表示
通過將不同的值用小括號括起來,即表示元組。
上例中元組的類型就是 (Int, Double, Char, String) ;元組中可以存放不同類型的值。
3、元組訪問
- 元組中的元素稱為組元。可以通過 _1、 _2 、_3 的形式來訪問對應下標的組元。
【注:元組中組元下標從1開始。】
- 通過模式匹配來訪問元組中的值
忽略不需要的值。在模式匹配時,通過 _ (萬能匹配符)來為不需要獲取值的組元占位,每個 _ 僅可以為一個組元占位。
4、元組可用於函數返回多個值的情形
上例中,函數定義返回值類型為元組 (Int, String);