scala的多种集合的使用(1)之集合层级结构与分类
一、在使用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)
三、选择一个集合类
- scala通用序列集合
- 主要的不可变的序列集合类
- 主要的可变序列集合类
- 在API库中常用的特质
- 常用到的map,包括可变和不可变的版本
- 常用set,包括可变和不可变的版本
- 别的集合类
scala的多种集合的使用(1)之集合层级结构与分类的更多相关文章
- scala的多种集合的使用(2)之集合常用方法
一.常用的集合方法 1.可遍历集合的常用方法 下表列出了Traverable在所有集合常用的方法.接下来的符号: c代表一个集合 f代表一个函数 p代表一个谓词 n代表一个数字 op代表一个简单的操作 ...
- Scala学习之路 (四)Scala的数组、映射、元组、集合
一.数组 1.定长数组和变长数组 import scala.collection.mutable.ArrayBuffer object TestScala { def main(args: Array ...
- 牛客网Java刷题知识点之Java 集合框架的构成、集合框架中的迭代器Iterator、集合框架中的集合接口Collection(List和Set)、集合框架中的Map集合
不多说,直接上干货! 集合框架中包含了大量集合接口.这些接口的实现类和操作它们的算法. 集合容器因为内部的数据结构不同,有多种具体容器. 不断的向上抽取,就形成了集合框架. Map是一次添加一对元素. ...
- 背水一战 Windows 10 (22) - 绑定: 通过 Binding 绑定对象, 通过 x:Bind 绑定对象, 通过 Binding 绑定集合, 通过 x:Bind 绑定集合
[源码下载] 背水一战 Windows 10 (22) - 绑定: 通过 Binding 绑定对象, 通过 x:Bind 绑定对象, 通过 Binding 绑定集合, 通过 x:Bind 绑定集合 作 ...
- 【ASP.NET实战教程】ASP.NET实战教程大集合,各种项目实战集合
[ASP.NET实战教程]ASP.NET实战教程大集合,各种项目实战集合,希望大家可以好好学习教程中,有的比较老了,但是一直很经典!!!!论坛中很多小伙伴说.net没有实战教程学习,所以小编连夜搜集整 ...
- 绑定: 通过 Binding 绑定对象, 通过 x:Bind 绑定对象, 通过 Binding 绑定集合, 通过 x:Bind 绑定集合
背水一战 Windows 10 之 绑定 通过 Binding 绑定对象 通过 x:Bind 绑定对象 通过 Binding 绑定集合 通过 x:Bind 绑定集合 示例1.演示如何通过 Bindin ...
- 对比两个同类型的泛型集合并返回差异泛型集合 ——两个List<类名>的比较
1: /// <summary> 2: /// 对比两个同类型的泛型集合并返回差异泛型集合 3: /// </summary> 4: /// <typeparam nam ...
- [黑马程序员] 集合框架2——Map系 & 集合工具类(Collections、Arrays)
---------------------- ASP.Net+Android+IO开发..Net培训.期待与您交流! ---------------------- 0. 集合框架按其所实现的接口, 大 ...
- java集合框架工具类Collections,集合的操作
1 import java.util.*; public class asList { public static void main(String args[]) { // int arr[] = ...
随机推荐
- PHP全栈学习笔记4
php和JavaScript,掌握JavaScript基础,自定义函数,流程控制语句,事件,调用JavaScript脚本,在PHP中使用JavaScript. JavaScript是网景公司开发的,是 ...
- Solr 15 - Solr添加和更新索引的过程 (文档的路由细节)
目录 1 添加文档的细节 1.1 注册观察者 - watcher 1.2 文档的路由 - document route 1.2.1 路由算法 1.2.2 Solr路由的实现类 1.2.3 implic ...
- ZooKeeper 02 - ZooKeeper集群的节点为什么是奇数个
目录 1 关于节点个数的说明 2 ZooKeeper集群的容错数 3 ZooKeeper集群可用的标准 4 为什么不能是偶数个节点 4.1 防止由脑裂造成的集群不可用 4.2 奇数个节点更省资源 4. ...
- Session的使用与Session共享问题
Session的使用与Session共享问题 Session方法 getId():获取sessionId,这个id不一定是数字,比方说它用字符串来表示唯一标识,所以它返回值是String; boole ...
- [JavaScript] Cookie,localStorage,sessionStorage概述
Cookie Cookie 是一些数据, 存储于你电脑上的文本文件中,当 web 服务器向浏览器发送 web 页面时,在连接关闭后,服务端不会记录用户的信息.Cookie 的作用就是存储 web 页面 ...
- React-代码复用(mixin.hoc.render props)
前言 最近在学习React的封装,虽然日常的开发中也有用到HOC或者Render Props,但从继承到组合,静态构建到动态渲染,都是似懂非懂,索性花时间系统性的整理,如有错误,请轻喷~~ 例子 以下 ...
- [转]Windows10中Virtualbox没办法选择和安装64位的Linux系统
本文转自:https://blog.csdn.net/strivenoend/article/details/78290325 明明在公司的WIN7系统中使用Virtualbox就可以安装64位的Ub ...
- 简简单单的Vue1(MVVM与Vue的双向绑定原理)
既然选择了远方,便只顾风雨兼程 __ HANS许 系列:零基础搭建前后端分离项目 系列:零基础搭建前后端分离项目 Vue 在此之前的文章我们讲述了前端开发的工具,语言的知识,接下来我们从头开始学习一个 ...
- HTML中块元素与内联元素的概念
HTML中块元素与内联元素的概念 div就是一个块元素,所谓的块元素就是会独占一行的的元素,无论他的内容有多少,他都会独占一整行. p h1 h2 h3 ... div这个标签没有任何语义,就是一个纯 ...
- 原生js实例对象方法
Array中的方法 ☞ toString() // 把数组转换为字符串,使用逗号分隔☞ valueOf() // 返回数组对象本身 ☞ 栈方法(先进后出)ary.push() // 该方法有一个返回值 ...