容器(collection):
Scala提供了一套丰富的容器(collection)库,包括序列(Sequence)、集合(Set)、映射(Map)等
根据容器的元素的组织方式和操作方式,可以分未有序的无序的,可变的不可变的等不同的容器类别
Scala用了三个包来组织容器类,分别是scala.collection 、scala.collection.mutable和scala.collection.immutable。scala.collection包中的容器通常都具备对应的不可变实现和可变实现。
scala.collection包中容器的宏观层次结构:
列表(List):
列表: 一种共享相同类型的不可变的对象序列。定义在scala.collection.immutable包中
不同于Java的java.util.List,scala的List一旦被定义,其值就不能改变,因此声明List时必须初始化
- 列表有头部和尾部的概念,可以分别使用head和tail方法来获取
- head返回的是列表第一个元素的值
- tail返回的是除第一个元素外的其它值构成的新列表,这体现出列表具有递归的链表结构
构造列表常用的方法是通过在已有列表前端增加元素,使用的操作符为::,例如:
val otherList="Apache"::strList
执行该语句后strList保持不变,而otherList将成为一个新的列表:
List("Apache","BigData","Hadoop","Spark")
Scala还定义了一个空列表对象Nil,借助Nil,可以将多个元素用操作符::串起来初始化一个列表
val intList = 1::2::3::Nil与val intList = List(1,2,3)等效
集合(set):
集合(set):不重复元素的容器(collection)。
列表中的元素是按照插入的先后顺序来组织的,但是,“集合”中的元素并不会记录元素的插入顺序,而是以“哈希”方法对元素的值进行组织,所以,它允许你快速地找到某个元素
集合包括可变集和不可变集,分别位于scala.collection.mutable包和scala.collection.immutable包,缺省情况下创建的是不可变集
如果要声明一个可变集,则需要提前引入scala.collection.mutable.Set
映射(map):
映射(Map):一系列键值对的容器。键是唯一的,但值不一定是唯一的。可以根据键来对值进行快速的检索
Scala 的映射包含了可变的和不可变的两种版本,分别定义在包scala.collection.mutable 和scala.collection.immutable 里。默认情况下,Scala中使用不可变的映射。如果想使用可变映射,必须明确地导入scala.collection.mutable.Map
如果要获取映射中的值,可以通过键来获取:
对于这种访问方式,如果给定的键不存在,则会抛出异常,为此,访问前可以先调用contains方法确定键是否存在
循环遍历映射
for ( ( k , v ) <- 映射) 语句块
for((k , v )<- university){printf("Code is : %s and name is %s\n",k,v)}
也可以只遍历映射中的k或者v university.keys university.values