1.主要的集合特质
2.可变和不可变集合
3.序列
4.列表
5.可变列表
6.集
7.用于添加或者去除元素的操作符
8.常用方法
9.将函数映射到集合
10.化简、折叠和扫描
11.拉链操作
12.迭代器
13.流
14.懒视图
15.与java集合的互操作
16.线程安全的集合
17.并行集合。
1.主要的集合特质
Seq是一个有先后次序的值的序列,比如数组或列表。举例来说,ArrayBuffer是带下标的,但链表不是。
Set,无顺序。SortedSet,元素以某种排过序的顺序被访问。
Map键值对。SortedMap按照键的顺序被访问。
这个继承层级对java的改进:
1.映射隶属于同一个继承层级而不是一个单独的层级关系。
2.IndexedSeq是数组的超类型,但不是列表的超类型,以便于区分。
集合的创建演示:
2.可变和不可变集合
当你握有一个指向scala.collection.immutable.Map的引用时,没人能修改这个映射。
如果你有的是一个scala.collection.Map,那么,你不能修改它,但别人也许会。
Scala优先采用不可变集合。scala.collection包中的伴生对象产出不可变的集合。
举例来说,scala.collection.Map("Helo" -> 42)是不可变的映射。
3.序列
Vector是ArrayBuffer的不可变版本,一个带下标的序列,支持快速的随机访问。
Range表示一个整数序列,比如10,20,30。Range对象并不存储所有值而只是起始值、结束值和增值。你可以用to和until来构造Range对象。
4.列表
::是从右边开始结合的, 9::(4::(2::Nil))
递归求和
Scala类库直接求和:
5.可变列表
将集合中的负数都变成0:
如下循环去除每两个元素中的第一个
除LinkedList外,Scala还提供了一个DoubleLinkedList,区别是它多带一个pre引用。
注意,如果你想要把列表中的某个节点变成列表中的最后一个节点,你不能将next引用设为Nil,而应该将它设为LinkedList.empty。也不要将它设为null,不然你在遍历该链表时会遇到空指针错误。
6.集
添加元素,证明set集合是不重复的。
遍历不保证顺序:
如果想让记住元素被插入的顺序
如果想要按照已排序的顺序来访问集中的元素,用已排序的集合:
contains方法检查某个集是否包含给定的值
subsetOf方法检查某个集当中的所有元素是否都被另一个集包含。
union、intersect和diff方法执行通常的集操作。
你也可以将联合union写作++,将差异diff写作--。
7.用于添加或者去除元素的操作符
一般来说,+用于将元素添加到无先后次序的集合,而+:和:+则是将元素添加到有现有次序的集合的开头或末尾。
Vector是不可变集合。
ArrayBuffer是可变集合。
对于不可变集合,你可以在var上使用+=或:+=,如下:
因为Vector没有+操作符。
要移除元素,使用-操作符
++一次性添加多个元素
--一次性删除多个元素
scala提供了许多用于添加和移除元素的操作符。总结如下:
1.向后(:+)或向前(+:)追加元素到序列当中
2.添加(+)元素到无先后次序的集合中
3.用-移除元素
4.用++或者--来批量添加和移除元素
5.对于列表,优先使用::和:::
6.改值操作有+=、++=、-=、--=
7.对于以及,更多用++、&和--
8.尽量不用++:、+=: 和 ++=
8.常用方法
续上。
Seq特质在Iterable特质的基础上又额外添加了一些方法。
续上。