继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

scala的多种集合的使用(1)之集合层级结构与分类

蝴蝶不菲
关注TA
已关注
手记 372
粉丝 81
获赞 381

一、在使用scala集合时有几个概念必须知道:

1.谓词是什么?

谓词就是一个方法,一个函数或者一个匿名函数,接受一个或多个函数,返回一个Boolean值。

例如:下面方法返回true或者false,所以它是一个谓词。

scala> def isEven(i: Int) = if(i % 2 ==0) true else falseisEven: (i: Int)Boolean

2.匿名函数是什么?

匿名函数也被称作函数自变量,作为变量传入把函数作为参数的方法中,或者赋值给一个变量。

复制代码

scala> (i: Int) => i % 2 ==0res22: Int => Boolean = <function1>scala> val list = List.range(1,10)
list: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9)

scala> val ebents = list.filter(_ % 2 == 0)
ebents: List[Int] = List(2, 4, 6, 8)

复制代码

3.隐私循环是什么?

在上面的例子中,filter方法包含一个循环,会遍历集合里的每个元素然后返回一个新的集合。

scala> for {     | e <- list     | if e % 2 ==0
     | }yield e
res23: List[Int] = List(2, 4, 6, 8)

二、集合的层级结构

1.集合类

https://img.mukewang.com/5b7ecbaa0001868e06770306.jpg

  • traversable特质遍历了整个集合,scaladoc说他实现了一个就foreach方法而言的所有集合的通用方法,这样就可以反复遍历集合。

  • iterable特质定义了一个迭代器,可以一次循环一个集合元素的方式,但当用迭代器时,集合只允许被循环一次,因为在迭代器的过程中每个元素都被改变了。

2.序列

https://img1.mukewang.com/5b7ecf4f0001016e06780303.jpg

序列分为两大类,索引序列和线性序列。

  • 索引序列意味着随机存取是最高效的,比如读取数组的元素,如arr(5000)。默认情况下,在scala2.10.x版本中,创建Vector式会认为是一个索引序列。

    scala> val x = IndexedSeq(1,2,3)
    x: IndexedSeq[Int] = Vector(1, 2, 3)
  • 线性序列说明集合可以很方便的被分辨为头尾部分,并且用head、tail和isEmpty方法是很常见的。当创建一个LinearSeq时会创建一个list的列表。

    scala> val seq = scala.collection.immutable.LinearSeq(1,2,3)
    seq: scala.collection.immutable.LinearSeq[Int] = List(1, 2, 3)

 3.Map类

 https://img.mukewang.com/5b7ecf61000113f406820178.jpg

  • scala的Map是一个键值对的组合,其中键必须是唯一的。当只需要一个简单的不可变的map时,可以新建一个而不需要import。

    scala> val m = Map(1 -> "a",2 -> "b")
    m: scala.collection.immutable.Map[Int,String] = Map(1 -> a, 2 -> b)
  • 可变的Map默认不在可变范围,所以必须引用他来使用。
    scala> val m = collection.mutable.Map(1 -> "a",2 -> "b")
    m: scala.collection.mutable.Map[Int,String] = Map(2 -> b, 1 -> a)

4.Set类

 scala的set是没有重复元素的集合。

https://img4.mukewang.com/5b7ecf6a00011f9706820246.jpg

  • 如果只需要不可变的集合,可以这样创建,不需要import引入。

    scala> val set = Set(1,2,3)
    set: scala.collection.immutable.Set[Int] = Set(1, 2, 3)
  • 如果需要可变的集合,必须引用它,或者引用原路径。

    scala> val set = collection.mutable.Set(1,2,3)
    set: scala.collection.mutable.Set[Int] = Set(1, 2, 3)

 三、选择一个集合类

  1. scala通用序列集合
    https://img.mukewang.com/5b7ecf750001615a04310094.jpg

  2. 主要的不可变的序列集合类
    https://img.mukewang.com/5b7ecf8100010b0f06750281.jpg

  3. 主要的可变序列集合类
    https://img.mukewang.com/5b7ed0380001ef5f06730189.jpg

    https://img4.mukewang.com/5b7ecf8c00017b4f06720217.jpg

  4. 在API库中常用的特质
    https://img.mukewang.com/5b7ecf960001e34e04260123.jpg

  5. 常用到的map,包括可变和不可变的版本
    https://img2.mukewang.com/5b7ecfa10001505f06740304.jpg

  6. 常用set,包括可变和不可变的版本
    https://img1.mukewang.com/5b7ecfaa0001bacd06750302.jpg

  7. 别的集合类
    https://img2.mukewang.com/5b7ecfbd000182fd06730241.jpg

原文出处:https://www.cnblogs.com/zhaohadoopone/p/9513756.html

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP