5.7 KiB
5.7 KiB
集合
一、集合简介二、集合结构
3.1 scala.collection
3.2 scala.collection.mutable
3.2 scala.collection.immutable
三、Trait Traversable
四、Trait Iterable
五、修改集合
一、集合简介
Scala中拥有多种集合类型,主要分为可变的和不可变的集合两大类:
-
可变集合: 可以被修改。即可以更改,添加,删除集合中的元素;
-
不可变集合类:不能被修改。对集合执行更改,添加或删除操作都会返回一个新的集合,而不是修改原来的集合。
二、集合结构
Scala中的大部分集合类都存在三类变体,分别位于scala.collection
, scala.collection.immutable
, scala.collection.mutable
包中。还有部分集合类位于scala.collection.generic
包下。
- scala.collection.immutable :包是中的集合是不可变的;
- scala.collection.mutable :包中的集合是可变的;
- scala.collection :包中的集合,既可以是可变的,也可以是不可变的。
val sortSet = scala.collection.SortedSet(1, 2, 3, 4, 5)
val mutableSet = collection.mutable.SortedSet(1, 2, 3, 4, 5)
val immutableSet = collection.immutable.SortedSet(1, 2, 3, 4, 5)
如果你仅写了Set
而没有加任何前缀也没有进行任何import
,则Scala默认采用不可变集合类。
scala> Set(1,2,3,4,5)
res0: scala.collection.immutable.Set[Int] = Set(5, 1, 2, 3, 4)
3.1 scala.collection
scala.collection包中所有集合如下图:

3.2 scala.collection.mutable
scala.collection.mutable包中所有集合如下图:

3.2 scala.collection.immutable
scala.collection.immutable包中所有集合如下图:

三、Trait Traversable
Scala中所有集合的顶层实现是Traversable
。它唯一的抽象方法是foreach
:
def foreach[U](f: Elem => U)
实现Traversable
的集合类只需要实现这个抽象方法,所有其他方法都可以从Traversable继承
。Traversable中一共定义了几十种关于集合操作方法,关于这些方法的说明可以参考官方文档:trait-traversable。
四、Trait Iterable
Scala中所有的集合都直接或者间接实现了Iterable
特质,Iterable
拓展自Traversable
,并额外定义了十几种方法,关于这些方法的用途,官方文档上同样也有详细的说明:trait-iterable。
五、修改集合
当你想对集合添加或者删除元素,需要根据不同的集合类型选择不同的操作符号:
操作符 | 描述 | 集合类型 |
---|---|---|
coll(k) 即coll.apply(k) |
获取指定位置的元素 | Seq, Map |
coll :+ elem elem +: coll |
向集合末尾或者集合头增加元素 | Seq |
coll + elem coll + (e1, e2, ...) |
追加元素 | Seq, Map |
coll - elem coll - (e1, e2, ...) |
删除元素 | Set, Map, ArrayBuffer |
coll ++ coll2 coll2 ++: coll |
合并集合 | Iterable |
coll -- coll2 | 移除coll中包含的coll2中的元素 | Set, Map, ArrayBuffer |
elem :: lst lst2 :: lst |
把指定列表(lst2)或者元素(elem)添加到列表(lst)头部 | List |
list ::: list2 | 合并List | List |
set | set2 set & set2 set &~ set2 |
并集、交集、差集 | Set |
coll += elem coll += (e1, e2, ...) coll ++= coll2 coll -= elem coll -= (e1, e2, ...) coll --= coll2 |
添加或者删除元素,并将修改后的结果赋值给集合本身 | 可变集合 |
elem +=: coll coll2 ++=: coll |
在集合头部追加元素或集合 | ArrayBuffer |