Scala编程——第10章:Scala集合——集合简介(1)


本章将学习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编程》

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页