Skip to content

集合

1. 集合简介

  1. Scala的集合有三大类:序列Seq、集Set、映射Map,所有的集合都扩展自Iterable特质。 类似Java中的String&StringBuilder, Scala中的集合也分为两大类。
  2. 对于几乎所有的集合类,Scala都同时提供了可变不可变的版本,分别位于以下两个包:
    • 不可变集合:scala.collection.immutable
    • 可变集合:scala.collection.mutable
  3. 不可变集合,就是指该集合对象不可修改,每次修改就会返回一个新对象,而不会对原对象进行修改。类似于java中的String对象。
  4. 可变集合,就是这个集合可以直接对原对象进行修改,而不会返回新的对象。类似于java中StringBuilder对象。

提示

这里所指的不可变并不是变量本身的值不可变,而是变量指向的那个内存地址不可变

1.1 不可变集合(scala.collection.immutable)

不可变集合图

1.2 可变集合(scala.collection.mutable)

可变集合图

1.3 不可变和可变集合说明

图中蓝色方块表示的是特质,黑色方块表示的是类,和Java相比:

  1. Set、Map是Java中也有的集合。
  2. Seq是Java没有的,从图中可以发现List归属到Seq了,因此这里的List就和Java不是同一个概念了。
  3. 我们前面的for循环有一个1to3,就是IndexedSeq下的Range,String也是属于IndexedSeq。
  4. 我们发现经典的数据结构比如Queue和Stack被归属到LinearSeq(线性序列)。
  5. Scala中的Map体系有一个SortedMap,说明Scala的Map可以支持排序。
  6. IndexedSeq和LinearSeq的区别:
    • IndexedSeq是通过索引来查找和定位,因此速度快,比如String就是一个索引集合,通过索引即可定位。
    • LinearSeq是线型的,即有头尾的概念,这种数据结构一般是通过遍历来查找。