BigData-Notes/notes/Scala集合类型.md
2019-06-04 09:14:35 +08:00

5.7 KiB
Raw Blame History

集合

一、集合简介
二、集合结构
        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

参考资料

  1. https://docs.scala-lang.org/overviews/collections/overview.html
  2. https://docs.scala-lang.org/overviews/collections/trait-traversable.html
  3. https://docs.scala-lang.org/overviews/collections/trait-iterable.html