一、在使用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. 当 “HTTP” 先生遇上“S”小姐

    情人节的晚上,天空中淅淅沥沥的下着带有些寒意的小雨.HTTP 先生孤零零的坐在咖啡厅中,对着面前的电脑发呆.他有意的屏蔽掉了周边情侣们的窃窃私语,这对单身的他来说是狗粮,也是一阵阵伤害.这时,咖啡厅的 ...

  2. 查看ntp时间是否同步

    nptq -p 命令 ntpq用来监视ntpd操作,ntpq -p查询网络中的NTP服务器,同时显示客户端和每个服务器的关系,也可以用watch实时查看. 位置 标志 含义 remote之前 * 响应 ...

  3. 最简单的SpringBoot整合MyBatis教程

    前面两篇文章和读者聊了Spring Boot中最简单的数据持久化方案JdbcTemplate,JdbcTemplate虽然简单,但是用的并不多,因为它没有MyBatis方便,在Spring+Sprin ...

  4. SQL优化 MySQL版 - 多表优化及细节详讲

    多表优化及细节详讲 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 注:本文章需要MySQL数据库优化基础或观看前几篇文章,传送门: B树索引详讲(初识SQL优化,认识索引):htt ...

  5. Vmware虚拟机中CentOS7与Docker安装图文教程

    1.安装VMware 下载一个软件安装: 2.新建一个虚拟机 等待自动安装完成 配置系统语言: 配置系统时间: 配置系统键盘: 语言支持: 默认自动使用安装源: 配置软件环境,需要及时添加的软件,这里 ...

  6. Dalvik 虚拟机操作码

    Dalvik 虚拟机操作码 表中的vx.vy.vz表示某个Dalvik寄存器.根据不同指令可以访问16.256或64K寄存器. 表中lit4.lit8.lit16.lit32.lit64表示字面值(直 ...

  7. java锁与监视器概念 为什么wait、notify、notifyAll定义在Object中 多线程中篇(九)

    在Java中,与线程通信相关的几个方法,是定义在Object中的,大家都知道Object是Java中所有类的超类 在Java中,所有的类都是Object,借助于一个统一的形式Object,显然在有些处 ...

  8. 【Vue.js】代码优化:在dom中加一行v-if就可少写一个循环类方法

    [问题描述] 把当前用户的购物车中(cartList),商品(good)选中字段checked = true的商品在订单页面中进行展示出来. [一般做法](两次循环) 首先取出当前用户的购物车列表,循 ...

  9. Neo4j入门之中国电影票房排行浅析

    什么是Neo4j?   Neo4j是一个高性能的NoSQL图形数据库(Graph Database),它将结构化数据存储在网络上而不是表中.它是一个嵌入式的.基于磁盘的.具备完全的事务特性的Java持 ...

  10. Mysql使用event,类似oracle job

    MySQL从5.1开始支持event功能,类似oracle的job功能.有了这个功能之后我们就可以让MySQL自动的执行数据汇总等功能,不用像以前需要操作的支持了.如linux crontab功能. ...