Scala学习笔记(3)-数组集合元组

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.")
相关文章
相关标签/搜索