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

1.谓词是什么?

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

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

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

2.匿名函数是什么?

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

scala> (i: Int) => i % 2 ==0
res22: 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.集合类

  • traversable特质遍历了整个集合,scaladoc说他实现了一个就foreach方法而言的所有集合的通用方法,这样就可以反复遍历集合。
  • iterable特质定义了一个迭代器,可以一次循环一个集合元素的方式,但当用迭代器时,集合只允许被循环一次,因为在迭代器的过程中每个元素都被改变了。

2.序列

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

  • 索引序列意味着随机存取是最高效的,比如读取数组的元素,如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类

  • 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是没有重复元素的集合。

  • 如果只需要不可变的集合,可以这样创建,不需要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通用序列集合
  2. 主要的不可变的序列集合类
  3. 主要的可变序列集合类

  4. 在API库中常用的特质
  5. 常用到的map,包括可变和不可变的版本
  6. 常用set,包括可变和不可变的版本
  7. 别的集合类

scala的多种集合的使用(1)之集合层级结构与分类的更多相关文章

  1. scala的多种集合的使用(2)之集合常用方法

    一.常用的集合方法 1.可遍历集合的常用方法 下表列出了Traverable在所有集合常用的方法.接下来的符号: c代表一个集合 f代表一个函数 p代表一个谓词 n代表一个数字 op代表一个简单的操作 ...

  2. Scala学习之路 (四)Scala的数组、映射、元组、集合

    一.数组 1.定长数组和变长数组 import scala.collection.mutable.ArrayBuffer object TestScala { def main(args: Array ...

  3. 牛客网Java刷题知识点之Java 集合框架的构成、集合框架中的迭代器Iterator、集合框架中的集合接口Collection(List和Set)、集合框架中的Map集合

    不多说,直接上干货! 集合框架中包含了大量集合接口.这些接口的实现类和操作它们的算法. 集合容器因为内部的数据结构不同,有多种具体容器. 不断的向上抽取,就形成了集合框架. Map是一次添加一对元素. ...

  4. 背水一战 Windows 10 (22) - 绑定: 通过 Binding 绑定对象, 通过 x:Bind 绑定对象, 通过 Binding 绑定集合, 通过 x:Bind 绑定集合

    [源码下载] 背水一战 Windows 10 (22) - 绑定: 通过 Binding 绑定对象, 通过 x:Bind 绑定对象, 通过 Binding 绑定集合, 通过 x:Bind 绑定集合 作 ...

  5. 【ASP.NET实战教程】ASP.NET实战教程大集合,各种项目实战集合

    [ASP.NET实战教程]ASP.NET实战教程大集合,各种项目实战集合,希望大家可以好好学习教程中,有的比较老了,但是一直很经典!!!!论坛中很多小伙伴说.net没有实战教程学习,所以小编连夜搜集整 ...

  6. 绑定: 通过 Binding 绑定对象, 通过 x:Bind 绑定对象, 通过 Binding 绑定集合, 通过 x:Bind 绑定集合

    背水一战 Windows 10 之 绑定 通过 Binding 绑定对象 通过 x:Bind 绑定对象 通过 Binding 绑定集合 通过 x:Bind 绑定集合 示例1.演示如何通过 Bindin ...

  7. 对比两个同类型的泛型集合并返回差异泛型集合 ——两个List<类名>的比较

    1: /// <summary> 2: /// 对比两个同类型的泛型集合并返回差异泛型集合 3: /// </summary> 4: /// <typeparam nam ...

  8. [黑马程序员] 集合框架2——Map系 & 集合工具类(Collections、Arrays)

    ---------------------- ASP.Net+Android+IO开发..Net培训.期待与您交流! ---------------------- 0. 集合框架按其所实现的接口, 大 ...

  9. java集合框架工具类Collections,集合的操作

    1 import java.util.*; public class asList { public static void main(String args[]) { // int arr[] = ...

随机推荐

  1. Google 工程师:为什么 CDN 对移动客户端加速“没有”效果

    王者荣耀是近两年来比较火的手游,不少小伙伴都有玩过.玩这个游戏最怕的不是遇到猪一般的队友,也不是怕遇到神一样的对手.最让我们感到害怕和绝望的是,团战爆发时,而你 460 了.460 是一个玩家常用的词 ...

  2. Jenkins~配合Docker及dotnetCore进行生产和测试环境的灵活部署

    回到目录 首先要清楚本文是讲dotnetcore项目在生产和测试环境部署的,这在过去的frameworks项目里,我们可以通过设置web.config的环境变量,然后再发布时指定具体的变量,去实现生产 ...

  3. 4.5管道实现机制和模拟构建管道「深入浅出ASP.NET Core系列」

    希望给你3-5分钟的碎片化学习,可能是坐地铁.等公交,积少成多,水滴石穿,谢谢关注. 管道实现机制 要了解管道的实现机制,我们必须要深入框架的源码,幸亏微软开源了,我们可以访问GitHub的地址来下载 ...

  4. 第一节: dingo/API 最新版 V2.0 之安装讲解(连载)

    我发现关于dingo/API V2.0的资料少之又少,应该也是发布时间不久的原因.下面,我就来给大家讲解(翻译)下官方的英文文档,如果有说的不对的地方,请指正.先附上,官网wiki地址https:// ...

  5. 【网摘】C#.NET 在 MVC 中动态绑定下拉菜单的方法

    1. 已知下拉菜单列表项: 在 Controller 控制器类中输入已下代码  1 public class DemoController : Controller 2 { 3     public  ...

  6. EF 外键不显示、如何让外键显示!增、删、改 操作时,外键不显示,只显示导航属性!

    一.问题描述:EF 外键不显示.如何让外键显示!增.删.改 操作时,外键不显示,只显示导航属性! EF 添加.增加.插入数据时,外键不显示! 二.解决方案:在根据数据库生成模型的时候,选中“在模型中” ...

  7. C# 插入文本框到PPT幻灯片

    概述 在文本框中我们可以实现的操作有很多,如插入文字.图片.设置字体大小.颜色.文本框背景填充.边框设置等.下面的示例中,将介绍通过C# 在PPT幻灯片中插入幻灯片的方法. 示例中包含了以下要点: 插 ...

  8. Linux运维第二课----Linux发展史、环境准备

    一.Linux的发展 1.1969年在贝尔实验室诞生Unix,是开源免费的,之后逐渐转变为收费系统. 2.1986年谭邦宁研发mini Unix,但主要用来教学. 3.斯托曼创建FSF(自由软件基金会 ...

  9. 《JavaScript高级程序设计》笔记:DOM2和DOM3(十二)

    DOM1级主要定义的是HTML和XML文档的底层结构.DOM2级和DOM3级在这个结构基础上引入了更多的交互能力,也支持更高级的XML特性.为此DOM2级和DOM3级分为了很多的模块(模块直接具有某种 ...

  10. Android Monkey压力测试使用

    一.Monkey简介: Monkey是Android中的一个命令行工具,可以运行在模拟器里或者现实设备中,向系统发送伪随机的用户事件流(点击.滑动.Application切换.横竖屏.应用关闭)实现对 ...