Scala函数式程序设计原理 week6 collections

来源:互联网 发布:策划相关书籍知乎 编辑:程序博客网 时间:2024/06/07 06:20

集合特质

这里写图片描述
Seq是一个有先后次序的值的序列,比如数组或列表。IndexSeq允许我们通过整型的下标快速访问任意元素。
Set是一组没有先后次序的值。在SortedSet中,元素以某种排过序的顺序被访问。
Map是一组(键,值)对偶。SortedMap按照键的排序访问其中的实体。

集合类型定义的增删操作符

这里写图片描述

Iterable特质的重要方法

这里写图片描述
这里写图片描述

可变和不可变集合

Scala同时支持可变和不可变的集合。不可变的集合从不改变,因此你可以安全地共享其引用,甚至在一个多线程的应用程序中也没问题。
Scala优先采用不可变集合

序列

这里写图片描述

Vector

Vector是ArrayBuffer的不可变版本,一个带下标的序列,支持快速的随机访问。向量以树形结构的形式实现,每个节点可以有不超过32个子结点,对于一个有100万个元素的向量而言,只需4层结点。

Range

Range表示一个整数序列,Range对象并不存储所有值而是只有起始值,结束值和增值。
可以用to(包含末尾)和until(不含末尾)和by(步长)方法构造Range对象。

val r:Range = 1 until 5//1,2,34val s:Range = 1 to 5//1,2,3,4,51 to 10 by 3 //1,4,7,10

Array和String

ArrayString支持和Seq相同的操作,可以隐式地转换成序列。(他们不能成为序列的子类,因为他们来组与Java)

val xs:Array[Int] = Array(1,2,3)xs map (x => 2*x)val ys: String = "Hello"ys filter (_.isUpper)

这里写图片描述

可变列表

可变的LinkedList和不可变的List相似,可以通过对elem引用赋值来修改其头部,对next引用赋值来修改其尾部。

for循环表达式

这里写图片描述

集Set

集是不重复元素的集合。集是无序的。

映射Map

另一个基础集合类型是map.一个类型为Map[Key,Value]的数据结构。

查询映射

map.getOrElse(key,default_value)

更新映射

在可变映射中,可以更新映射的值,或者添加一个新的映射关系
scores(“Bob”) = 10

迭代映射

for ((k,v) <- 映射) 处理k和v

默认值

至今为止,映射是偏函数,一个并非对所有输入值都有定义的函数。withDefaultValue操作可以将一个映射转换成完全函数。

val cap1 = capitalOfCounry withDefaultValue "<unknown>"cap1("abc")//"unkonwn"

这里写图片描述