集合(上)

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特质的基础上又额外添加了一些方法。

续上。

 

posted @ 2017-12-11 18:00  凌晨六点半  阅读(253)  评论(0编辑  收藏  举报