集合
1. 集合简介
- Scala的集合有三大类:序列Seq、集Set、映射Map,所有的集合都扩展自Iterable特质。 类似Java中的String&StringBuilder, Scala中的集合也分为两大类。
- 对于几乎所有的集合类,Scala都同时提供了可变和不可变的版本,分别位于以下两个包:
- 不可变集合:scala.collection.immutable
- 可变集合:scala.collection.mutable
- 不可变集合,就是指该集合对象不可修改,每次修改就会返回一个新对象,而不会对原对象进行修改。类似于java中的String对象。
- 可变集合,就是这个集合可以直接对原对象进行修改,而不会返回新的对象。类似于java中StringBuilder对象。
提示
这里所指的不可变并不是变量本身的值不可变,而是变量指向的那个内存地址不可变
1.1 不可变集合(scala.collection.immutable)
1.2 可变集合(scala.collection.mutable)
1.3 不可变和可变集合说明
图中蓝色方块表示的是特质,黑色方块表示的是类,和Java相比:
- Set、Map是Java中也有的集合。
- Seq是Java没有的,从图中可以发现List归属到Seq了,因此这里的List就和Java不是同一个概念了。
- 我们前面的for循环有一个1to3,就是IndexedSeq下的Range,String也是属于IndexedSeq。
- 我们发现经典的数据结构比如Queue和Stack被归属到LinearSeq(线性序列)。
- Scala中的Map体系有一个SortedMap,说明Scala的Map可以支持排序。
- IndexedSeq和LinearSeq的区别:
- IndexedSeq是通过索引来查找和定位,因此速度快,比如String就是一个索引集合,通过索引即可定位。
- LinearSeq是线型的,即有头尾的概念,这种数据结构一般是通过遍历来查找。