本章将学习Scala的集合,共6小节。主要包含以下内容:
- 1.集合简介
- 2.数组Array (点击链接 ——>数组)
- 3.列表List (点击链接 ——>列表)
- 4.元组Tuple (点击链接 ——>元组)
- 5.集Set (点击链接——>集set)
- 6.映射Map (点击链接 ——> 映射Map)
本节主要学习集合的概念、集合继承关系等等。具体的集合操作可选择点击上面的链接。
一、主要的集合特质
- Scala 所有集合类都可以在 scala.collection 包中找到:
- 包中的集合分为两大类:可变集合 和 不可变的集合,下图展示了这个包中所有的集合类,这些都是高级抽象类或特质。
- Scala的集合有具体分三大类:序列Seq、集Set、映射Map。所有的集合都扩展自Iterable特质。
- Seq: Seq是一个有先次序的值的序列,具有一定长度的可迭代访问的对象 。比如数组和列表
- Set: Set是一组没有先后次序的值的集合。
- Map: Map是一组(键,值)对偶

二、 不可变集合
- 不可变集合位于 scala.collection.immutable包中。Scala会默认导入这个包,即Scala默认使用不可变集合类。 下图展示了这个包中所有的集合类
- Scala不可变集合,意味着这个集合本身不能动态变化,对集合的新增改操作都会产生一个新的集合 。因此可以安全的共享其引用。

三、可变集合
- 可变集合位于scala.collection.mutable包中,如果想要使用可变的集合类,通用的做法是导入scala.collection.mutable包即可,使用时需要加上mutable前缀,mutable.Set时指的是可变的集合类。当没有前缀的 Set 时仍然指的是一个不可变集合,下图展示了这个包中所有的集合类
- scala可变集合,意味着这个集合本身能动态变化,对集合的增删改操作不对产生新的集合。

四、Traversable特质
- Traversable 是容器类的最高级别特质。 Traversable 继承TraversableLike。TraversableLike定义了很多操作集合的方法。比如常见的:map、flatMap、groupBy、foreach等等。
//The following methods are inherited from TraversableLike override def isEmpty: Boolean override def size: Int override def hasDefiniteSize override def ++[B >: A, That](xs: GenTraversableOnce[B])(implicit bf: CanBuildFrom[Traversable[A], B, That]): That override def map[B, That](f: A => B)(implicit bf: CanBuildFrom[Traversable[A], B, That]): That override def flatMap[B, That](f: A => GenTraversableOnce[B])(implicit bf: CanBuildFrom[Traversable[A], B, That]): That override def filter(p: A => Boolean): Traversable[A] override def remove(p: A => Boolean): Traversable[A] override def partition(p: A => Boolean): (Traversable[A], Traversable[A]) override def groupBy[K](f: A => K): Map[K, Traversable[A]] override def foreach[U](f: A => U): Unit override def forall(p: A => Boolean): Boolean override def exists(p: A => Boolean): Boolean override def count(p: A => Boolean): Int override def find(p: A => Boolean): Option[A] override def foldLeft[B](z: B)(op: (B, A) => B): B override def /: [B](z: B)(op: (B, A) => B): B override def foldRight[B](z: B)(op: (A, B) => B): B override def :\ [B](z: B)(op: (A, B) => B): B override def reduceLeft[B >: A](op: (B, A) => B): B override def reduceLeftOption[B >: A](op: (B, A) => B): Option[B] override def reduceRight[B >: A](op: (A, B) => B): B override def reduceRightOption[B >: A](op: (A, B) => B): Option[B] override def head: A override def headOption: Option[A] override def tail: Traversable[A] override def last: A override def lastOption: Option[A] override def init: Traversable[A] override def take(n: Int): Traversable[A] override def drop(n: Int): Traversable[A] override def slice(from: Int, until: Int): Traversable[A] override def takeWhile(p: A => Boolean): Traversable[A] override def dropWhile(p: A => Boolean): Traversable[A] override def span(p: A => Boolean): (Traversable[A], Traversable[A]) override def splitAt(n: Int): (Traversable[A], Traversable[A]) override def copyToBuffer[B >: A](dest: Buffer[B]) override def copyToArray[B >: A](xs: Array[B], start: Int, len: Int) override def copyToArray[B >: A](xs: Array[B], start: Int) override def toArray[B >: A : ClassTag]: Array[B] override def toList: List[A] override def toIterable: Iterable[A] override def toSeq: Seq[A] override def toStream: Stream[A] override def sortWith(lt : (A,A) => Boolean): Traversable[A] override def mkString(start: String, sep: String, end: String): String override def mkString(sep: String): String override def mkString: String override def addString(b: StringBuilder, start: String, sep: String, end: String): StringBuilder override def addString(b: StringBuilder, sep: String): StringBuilder override def addString(b: StringBuilder): StringBuilder override def toString override def stringPrefix : String override def view override def view(from: Int, until: Int): TraversableView[A, Traversable[A]]

五、构建集合实例
- 每个Scala集合特质或类都有带有一个apply方法的伴生对象,我们可以使用apply方法构建集合中的实例。 例如
Iterable(1,2,3) Set("jam","tom") Map("A" -> 90, "B" -> 80)
这样的设计叫做"统一创建原则"
六、参考资料
Scala教程
Scala集合数据结构
《Scala编程》

本文深入讲解Scala集合,包括集合概念、特质、不可变与可变集合的区别,以及Traversable特质和构建集合实例的方法。适用于Scala初学者和进阶开发者。
320

被折叠的 条评论
为什么被折叠?



