Scala學習——數組/映射/元組

【《快學Scala》筆記】java

數組  /  映射  /  元組算法

 

1、數組數組

一、定長數組函數

聲明數組的兩種形式:ui

  • 聲明指定長度的數組 val 數組名= new Array[類型](數組長度)

  

  • 提供數組初始值的數組,無需new關鍵字

  

Scala聲明數組時,須要帶有Array類名,且使用 () 來指明長度或提供初始值序列。scala

在JVM中,Scala的Array以Java數組的方式實現。如arr在JVM中的類型對應java.lang.String[],charArr對應char[]。3d

二、變長數組對象

  

ArrayBuffer,全稱scala.collection.mutable.ArrayBuffer,相似於Java中的ArrayList和C++中的vector,是長度可變數組類型的結構,稱爲數組緩衝。blog

經過:val 名 = ArrayBuffer[類型]() 來聲明,聲明ArrayBuffer時須要指明類型。排序

經過 += 操做符來添加元素或序列,++= 操做符來拼接數組。

【在ArrayBuffer的尾端添加或刪除元素是一個高效的操做。】 ArrayBuffer還支持在指定位置插入、刪除元素。

ArrayBuffer到數組的轉換: toArray方法

  

三、數組遍歷

經過for循環來遍歷數組

  

指定遍歷數組的步長——經過until(上界, 步長)

  

  

經過reverse函數逆序遍歷數組:

  

四、能夠經過 for循環+yield 來得到新的數組或ArrayBuffer

  

  

經過for+yield操做數組或ArrayBuffer以後將獲得新的數組或ArrayBuffer。

五、操做數組/數組緩衝經常使用函數

  

求和、求最大最小值、數組排序。經過sorted函數對數組或ArrayBuffer排序時,返回的是一個新的數組或ArrayBuffer,原有的不變。

能夠直接對數組調用排序算法,可是不能對ArrayBuffer排序。

  

quickSort是直接修改原數組,而sorted方法是返回新數組

六、多維數組

Scala中的多維數組同Java中同樣,多維數組都是數組的數組。

  • 經過 Array.ofDim[類型](維度1, 維度2, 維度3,....)來聲明多維數組,如聲明二維數組;

  

  從二維數組的初始化中,咱們能夠看到,多維數組在Scala中也是數組的數組。

  • 經過 Array[ Array[Int]](維度1) 來聲明數組,能夠聲明不規則數組;

  

  多維數組是數組的數組,按照這種性質來聲明多維數組,如例子中的二維數組,聲明時,須要指定最外圍的數組大小。

【注:能夠經過scala.collection.JavaConversions包中隱式轉換方法來實現Scala容器類與Java中類的轉換。】

 

2、映射

一、映射構造

對偶,即名值對。能夠經過 -> 操做符來定義對偶, 名->值 運算的結果是( 名, 值 ); 

  

也能夠聲明對偶形式的變量

  

映射是由對偶構成的,映射是對偶的集合。

  • 聲明不可變映射,直接使用Map來聲明時,默認是不可變映射類型。

  

  【注: 不可變映射維持元素插入順序。】

  • 聲明可變映射(scala.collection.mutable.Map)

  

  【注:放入可變映射中的值並未按照放入順序來排序的。】

  經過for循環來修改可變Map中的值;

  

  【注:映射可變、不可變指的是整個映射是否可變,包括元素值、映射中元素個數、元素次序等。】

  • 聲明空映射

  直接經過 new Map[類型1, 類型2]() 來定義映射會報錯,由於Map是抽象的,沒法實例化。

  定義空映射時,須要指定映射的實現類,經過new來定義;

  

  分別定義不可變映射與可變映射。注,直接使用 new HashMap定義時會報錯。

二、映射經常使用操做

  • 判斷映射中是否含有某個鍵: map.contains(鍵值)

  

  • 使用 += 向可變映射中添加元素或拼接映射

  

  • 使用 -= 移除可變映射中的鍵及對應元素

  

  • 不可變映射可經過 + 操做符返回一個新的不可變映射;不可變映射可經過 - 操做符返回一個新的不可變映射;

  

  • 映射遍歷

  

  • 獲取映射的鍵集合keySet和值集合

  

  經過映射的 keySet 方法能夠得到映射的由鍵值構成的集合;經過 values 方法能夠得到映射的值集合的Interable對象,應用於循環中。

  Scala的keySet / values 方法相似於Java中的映射方法。

三、Scala中映射的底層實現要麼基於哈希表,要麼基於平衡樹,其中基於平衡樹的映射內部是有序的。

  

  Scala目前基於平衡樹的映射只提供了不可變版本。

  【注:構建可變有序映射可藉助Java的TreeMap。】

四、可變映射中,若要構建維持元素插入順序的映射可經過LinkedHashMap。

五、經過scala.collection.JavaConversions.mapAsScalaMap可將Java的Map轉換爲Scala類型的Map;經過scala.collection.JavaConversions.mapAsJavaMap可將Scala的映射轉換爲Java類型的映射。

六、toMap方法

  使用toMap方法可將對偶組成的集合轉化爲映射。

  

 

3、元組

一、元組是不一樣類型的值的彙集;對偶是最簡單的元組。

二、元組表示

  經過將不一樣的值用小括號括起來,即表示元組。

  

  上例中元組的類型就是 (Int, Double, Char, String) ;元組中能夠存放不一樣類型的值。

三、元組訪問

  • 元組中的元素稱爲組元。能夠經過 _一、 _2 、_3 的形式來訪問對應下標的組元。

  

  【注:元組中組元下標從1開始。】

  • 經過模式匹配來訪問元組中的值

  

  忽略不須要的值。在模式匹配時,經過 _ (萬能匹配符)來爲不須要獲取值的組元佔位,每一個 _ 僅能夠爲一個組元佔位。

  

四、元組可用於函數返回多個值的情形

  

  上例中,函數定義返回值類型爲元組 (Int, String);

相關文章
相關標籤/搜索