1.帶類型的參數化數組 前端
val greetStrings= new Array[String](3)
其中Array[String]變量greetStrings的類型,3爲實例初始化參數。 java
Scala裏的數組是經過把索引放在圓括號裏面訪問的,而不是像Java那樣放在方括號裏。因此數組的第零個元素是greetStrings(0),不是greetStrings[0]。 編程
Scala如何看待val的意義的重要概念。當你用val定義一個變量,那麼這個變量就不能從新賦值,但它指向的對象卻仍能夠暗自改變。因此在本例中,你不能把greetStrings從新賦值成不一樣的數組;greetStrings將永遠指向那個它被初始化時候指向的同一個Array[String]實例。可是你能一遍遍修改那個Array[String]的元素,所以數組自己是可變的。 數組
2.不可變List app
方法不該該有反作用是函數風格編程的一個很重要的理念。方法惟一的效果應該是計算並返回值。用這種方式工做的好處就是方法之間不多糾纏在一塊兒,所以就更加可靠和可重用。另外一個好處(靜態類型語言裏)是傳入傳出方法的全部東西都被類型檢查器檢查,所以邏輯錯誤會更有可能把本身表現爲類型錯誤。把這個函數式編程的哲學應用到對象世界裏意味着使對象不可變。 函數式編程
Scala的List,scala.List,不一樣於Java的java.util.List,老是不可變的(而Java的List可變) 函數
當你在一個List上調用方法時,彷佛這個名字指代的List看上去被改變了,而實際上它只是用新的值建立了一個List並返回。 spa
比方說,List有個叫「:::」的方法實現疊加功能。你能夠這麼用: scala
val oneTwo = List(1, 2) val threeFour = List(3, 4) val oneTwoThreeFour = oneTwo ::: threeFour
List最經常使用的操做符是發音爲「cons」的‘::’。Cons把一個新元素組合到已有List的最前端,而後返回結果List。例如: code
val twoThree = List(2, 3) val oneTwoThree = 1 :: twoThree println(oneTwoThree)
注:不用寫成new List由於「List.apply()」是被定義在scala.List伴生對象上的工廠方法(後面章節會介紹伴生對象)
因爲定義空類的捷徑是Nil,因此一種初始化新List的方法是把全部元素用cons操做符串起來,Nil做爲最後一個元素。
val oneTwoThree = 1 :: 2 :: 3 :: Nil
Scala的List包裝了不少有用的方法,具體的能夠本身去查。
2個List比較相同能夠用==去作比較。
3.元組(Tuple)
與列表同樣,元組也是不可變的,但與列表不一樣,元組能夠包含不一樣類型的元素。元組頗有用,比方說,若是你須要在方法裏返回多個對象。Java裏你將常常建立一個JavaBean樣子的類去裝多個返回值,Scala裏你能夠簡單地返回一個元組。
val pair = (99, "Luftballons") println(pair._1) println(pair._2)
注:儘管理論上你能夠建立任意長度的元組,然而當前Scala庫僅支持到Tupe22
4.可變和不可變Set、Map
上面介紹的數組是可變的,List是不可變的,而對於Set和Map,Scala提供了可變和不可變兩種選擇。
他們的簡化名都是Set和Map,然而它們的全稱不同,由於每一個都放在不一樣的包裏,兩者缺省定義都是不可變的。
如Set不可變的scala.collection.immutable.Set,可變的scala.collection.mutable.Set
import scala.collection.immutable.Map var jetSet = Set("Boeing", "Airbus")//這裏定義的是不可變集 jetSet += "Lear" //由於是不可變集,因此這裏的+=實際上是從新賦值jetSet,因此jetSet要聲明成var而不是val println(jetSet.contains("Cessna"))
要向集加入新的變量,能夠在集上調用+,傳入新的元素。可變的和不可變的集都提供了+方法,但它們的行爲不一樣。可變集將把元素加入自身,不可變集將建立並返回一個包含了添加元素的新集。
Map和Set同樣,Scala採用了類繼承機制提供了可變的和不可變的兩種版本的Map
import scala.collection.mutable.Map val treasureMap = Map[Int, String]()//定義一個可變的Map,由於是可變的,因此不須要對treasureMap 從新賦值,因此它是val treasureMap += (1 -> "Go to island.") treasureMap += (2 -> "Find big X on ground.") treasureMap += (3 -> "Dig.")