大数据技术——Scala语言基础

news2024/9/21 12:46:55

Scala基础知识

控制结构

if条件表达式

有一点与Java不同的是,Scala中的if表达式的值可以赋值给变量

while循环
for循环

基本语法

其中,“变量<-表达式”被称为“生成器(generator).”

“守卫(guard)"的表达式:过滤出一些满足条件的结果。

基本语法:

for (变量<-表达式if条件表达式) 语句块

Scala也支持“多个生成器”的情形,可以用分号把它们隔开,比如:

.for推导式: for结构可以在每次执行的时候创造一个值,然后将包含了所有产生值的集合作为for循环表达式的结果返回,集合的类型由生成器中的集合类型确定

for(变量<-表达式) yield{语句块}

异常处理

Scala不支持Java中的“受检查异常”(checked exception),将所有异常都当作“不受检异常”(或称为运行时异常)

Scala仍使用try-catch结构来捕获异常

对循环的控制

为了提前终止整个循环或者跳到下一个循环,Scala没有break和continue关键字

Scala提供了一个Breaks类(位于包scala.util.control) 。

Breaks类有两个方法用于对循环结构进行控制,即breakable和break

数据结构

数组

数组:一种可变的、可索引的、元素具有相同类型的数据集合

Scala提供子参数化类型的通用数组类Array[T],其中干可以是任意的Scala类型,可以通过显式指定类型或者通过隐式推断来实例化一个数组

  • 声明一个整形数组

  • 声明一个字符串数组

可以不给出数组类型,Scala会自动根据提供的初始化数据来推断出数组的类型

多维数组的创建:调用Array的ofDim方法

可以使用多级圆括号来访问多维数组的元素,例如myMatrix(0)(1)返回第一行第二列的元素

元组

元组是对多个不同类型对象的一种简单封装。

定义元组最简单的方法就是把多个元素用逗号分开并用圆括号包围起来。使用下划线“_”加上从1开始的索引值,来访问元组的元素

如果需要在方法里返回多个不同类型的对象,Scala可以通过返回一个元组来实现

容器

·Scala提供了一套丰富的容器(collection)库,包括序列( Sequence)、集合(Set)、映射(Map)等

.Scala用了三个包来组织容器类,分别是

scala.collection 、scala.collection.mutable和scala.collection.immutable

scala.collection封装了可变容器和不可变容器的超类或特质,定义了可变容器和不可变容器的一些通用操作

scala.collection包中容器的宏观结构

序列

序列(Sequence):元素可以按照特定的顺序访问的容器。序列中每个元素均带有一个从0开始计数的固定索引位置

序列容器的根是collection.Seq特质。其具有两个子特质LinearSeq和IndexedSeq …

LinearSeq序列具有高效的head和 tail操作,而IndexedSeq序列具有高效的随机存储操作

实现了特质LinearSeq的常用序列有列表(List)和队列( Queue)。

实现了特质IndexedSeq的常用序列有可变数组(ArrayBuffer)和向量(Vector)

序列——列表

  • 列表:一种共享相同类型的不可变的对象序列。定义在scala.collection.immutable包中

  • 不同于Java的java.util.List,scala的List一旦被定义,其值就不能改变,因此声明List时必须初始化

var strList=List("BigData","Hadoop","Spark")

  • 列表有头部和尾部的概念,可以分别使用head和tail方法来获取

  • head返回的是列表第一个元素的值

  • tail返回的是除第一个元素外的其它值构成的新列表,这体现出列表具有递归的链表结构

  • strList.head将返回字符串”BigData”,strList.tail返回List("Hadoop","Spark")

构造列表常用的方法是通过在已有列表前端增加元素,使用的操作符为::,例如:

val otherList="Apache":.strList

执行该语句后strList保持不变,而otherList将成为一个新的列表:

List("Apache","BigData","Hadoop","Spark")

Scala还定义了一个空列表对象Nil,借助Nil,可以将多个元素用操作符::串起来初始化一个列表

val intList = 1::2::3::Nil与val intList = List(1,2,3)等效

注意:除了head、tail操作是常数时间O(1),其它按索引访问的操作都需要从头开始遍历,因此是线性时间复杂度O(N)

序列——向量

Vetor可以实现所有访问操作都是常数时间。

序列——Range

·Range类:一种特殊的、带索引的不可变数字等差序列。其包含的值为从给定起点按一定步长增长(减小)到指定终点的所有数值

· Range可以支持创建不同数据类型的数值序列,包括Int、Long、 Float、Double、 Char、Biglnt和BigDecimal等

(1)创建一个从1到5的数值序列,包含区间终点5,步长为1

(2)创建一个从1到5的数值序列,不包含区间终点5,步长为1

(3)创建一个从1到10的数值序列,包含区间终点10,步长为2

(4)创建一个Float类型的数值序列,从0.5f到5.9f,步长为0.3f

集合

·集合(set):不重复元素的容器(collection)

·列表(List)中的元素是按照插入的先后顺序来组织的,但是,“集合”中的元素并不会记录元素的插入顺序,而是以“哈希”方法对元素的值进行组织,所以,它允许你快速地找到某个元素

集合包括可变集和不可变集,分别位于scala.collection.mutable包和scala.collection.immutable包,缺省情况下创建的是不可变集

如果要声明一个可变集,则需要提前引入scala.collection.mutable.Set

映射

·映射(Map):一系列键值对的容器键是唯一的,但值不一定是唯一的。可以根据键来对值进行快速的检索

Scala的映射包含了可变的和不可变的两种版本,分别定义在包scala.collection.mutablescala.collection.immutable里。

默认情况下,Scala中使用不可变的映射。如果想使用可变映射,必须明确地导入scala.collection.mutable.Map

如果要获取映射中的值,可以通过键来获取

对于这种访问方式,如果给定的键不存在,则会抛出异常,为此,访问前可以先调用contains方法确定键是否存在

可变的映射

也可以使用+=操作来添加新的元素

迭代器

·迭代器( lterator)不是一个容器,而是提供了按顺序访问容器元素的数据结构

·迭代器包含两个基本操作: next和hasNext

next可以返回迭代器的下一个元素,hasNext用于检测是否还有下一个元素

建议:除next和hasnext方法外,在对一个迭代器调用了某个方法后,不要再次使用该迭代器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/383864.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Sandstorm 建设者亮点——2023 年 2 月

隆重推出 Sandstorm 建设者亮点——2023 年 2 月版&#xff0c;这是由最厉害的 Sandstorm 社区制作的独一无二的 NFT 系列。 从突破性的兔子机器人到神奇的蒸汽朋克海盗船&#xff0c;Sandstorm 建设者亮点 NFT 系列展示了一系列独一无二的创作。 19 项新资产将添加至 Sandstor…

提升内部客户服务的 13 个最佳实践攻略!

客户服务包含两个方面的内容&#xff1a;一个是内部服务&#xff1b;一个是外部服务。每一个企业在发展过程中都有内部客户和外部客户&#xff0c;内部服务是针对内部客户的&#xff0c;自己公司的部门与部门之间互为内部客户&#xff1b;外部服务是针对公司之外的外部客户的。…

MySQL数据库存储引擎【InnoDB/MyISAM/MEMORY 】

1.InnoDB存储引擎InnoDB给MySQL的表提供了事务处理、回滚、崩溃修复能力和多版本并发控制的事务安全。在MySQL从3.23.34a开始包含InnnoDB。它是MySQL上第一个提供外键约束的表引擎。而且InnoDB对事务处理的能力&#xff0c;也是其他存储引擎不能比拟的。靠后版本的MySQL的默认存…

你没用过工业智能网关?它已经在远程监控行业很热门了,足不出户远程控制设备。

一、项目背景 钢铁企业作为一个能量消耗比较大&#xff0c;污水排放比较多的工业&#xff0c;只有对技术进行不断的改革才能够实现节能减排的目的。这就需要相应的钢铁企业厂能够应用新的技术&#xff0c;实现污水的安全无污染处理&#xff0c;不断地改善环境&#xff0c;提高相…

卡特兰数及常见模型

卡特兰数 英文名Catalan number&#xff0c; 是组合数学中一个常出现在各种计数问题中出现的数列。其前几项为: 1 1 2 5 14 42 132 429 1430 4862 16796 58786 208012 742900 2674440 9694845 35357670 129644790 477638700 1767263190 6564120420 24466267020 91482563640 343…

苹果电脑怎么截屏?图文教学,包教包会

苹果电脑是很多设计师和程序员们所钟爱的电脑品牌&#xff0c;但是在使用过程中&#xff0c;有些小功能操作并不是那么容易掌握。比如&#xff0c;苹果电脑怎么截屏呢&#xff1f;如果您是新手&#xff0c;可能会感到有些困惑。别担心&#xff0c;下面我们将为您详细介绍如何在…

springboot整合minio及工具类

说明&#xff1a;本文章是springboot和minio的整合&#xff0c;同时还有上传和下载工具类&#xff0c;minio的具体介绍这里就不多说了【上传和下载都是基础工具类&#xff0c; minio的安装如果有时间就更新】 工程图&#xff1a;【主要功能在于工具类&#xff0c;在代码块11和…

好意外,发现永久免费使用的云服务器

原因就不说了&#xff0c;说一下过程&#xff0c;在百度搜pythonIDE的时候&#xff0c;发现了一个网站 https://lightly.teamcode.com/https://lightly.teamcode.com/ 就是这个网站&#xff0c;看见这个免费试用&#xff0c;一开始觉得没什么&#xff0c;在尝试使用的过程中发…

IIC总线式驱动开发(mpu6050)(二)

目录 六、I2C总线二级外设驱动开发方法 七、I2C总线二级外设驱动开发之名称匹配 1. i2c_register_board_info 2. i2c_new_device&#xff1a;明确二级外设地址的情况下可用 3. i2c_new_probed_device 八、I2C总线二级外设驱动开发之设备树匹配 六、I2C总线二级外设驱动开…

AVL树(Insert)

文章目录AVL树代码模拟实现Insert重点控制平衡:旋转->平衡右单旋左单旋左右双旋双旋平衡因子更新错误右左双旋左右双旋erase了解AVL树的性能AVL树 代码 高度平衡二叉搜索树 引入 二叉搜索树虽可以缩短查找的效率&#xff0c;但如果数据有序或接近有序二叉搜索树将退化为单…

C/C++网络编程笔记Socket

https://www.bilibili.com/video/BV11Z4y157RY/?vd_sourced0030c72c95e04a14c5614c1c0e6159b上面链接是B站的博主教程&#xff0c;源代码来自上面视频&#xff0c;侵删&#xff0c;这里只是做笔记&#xff0c;以供复习和分享。上一篇博客我记录了配置环境并且跑通了&#xff0…

从头开始搭建一个SpringBoot项目--SpringBoot文件的上传与下载

从头开始搭建一个SpringBoot项目--SpringBoot文件的上传前言流程分析代码结构代码详情UploadFileInfo.classUploadController.classUploadDao.classUploadDao.xmlUploadServices.classUploadServicesImpl.class测试下载示例前言 文件的上传和下载是很多系统必备的功能&#xf…

pytorch-复现经典深度学习模型-LeNet5

Neural Networks 使用torch.nn包来构建神经网络。nn包依赖autograd包来定义模型并求导。 一个nn.Module包含各个层和一个forward(input)方法&#xff0c;该方法返回output。 一个简单的前馈神经网络&#xff0c;它接受一个输入&#xff0c;然后一层接着一层地传递&#xff0c;…

代码随想录算法训练营day47 |动态规划 198打家劫舍 213打家劫舍II 337打家劫舍III

day47198.打家劫舍1.确定dp数组&#xff08;dp table&#xff09;以及下标的含义2.确定递推公式3.dp数组如何初始化4.确定遍历顺序5.举例推导dp数组213.打家劫舍II情况一&#xff1a;考虑不包含首尾元素情况二&#xff1a;考虑包含首元素&#xff0c;不包含尾元素情况三&#x…

网络技术|网络地址转换与IPv6|路由设计基础|4

对应讲义——p6 p7NAT例题例1解1例2解2例3解3例4解4一、IPv6地址用二进制格式表示128位的一个IPv6地址&#xff0c;按每16位为一个位段&#xff0c;划分为8个位段。若某个IPv6地址中出现多个连续的二进制0&#xff0c;可以通过压缩某个位段中的前导0来简化IPv6地址的表示。例如…

1月奶粉电商销售数据榜单:销售额约20亿,高端化趋势明显

鲸参谋电商数据监测的2023年1月份京东平台“奶粉”品类销售数据榜单出炉&#xff01; 根据鲸参谋数据显示&#xff0c;1月份京东平台上奶粉的销量约675万件&#xff0c;销售额约20亿元&#xff0c;环比均下降19%左右。与去年相比&#xff0c;整体也下滑了近34%。可以看出&#…

真无线耳机哪个牌子好用?2023便宜好用的无线耳机推荐

蓝牙耳机经过近几年的快速发展&#xff0c;变得越来越普及&#xff0c;并且在一些性能上也做得越来越好。那么&#xff0c;真无线耳机哪个牌子好用&#xff1f;下面&#xff0c;我来给大家推荐几款便宜好用的无线耳机&#xff0c;可以参考一下。 一、南卡小音舱蓝牙耳机 参考…

Nuxt 3.0 全栈开发:五种渲染模式的差异和使用场景全解析

Nuxt 3.0 全栈开发 - 杨村长 - 掘金小册核心知识 工程架构 全栈进阶 项目实战&#xff0c;快速精通 Nuxt3 开发&#xff01;。「Nuxt 3.0 全栈开发」由杨村长撰写&#xff0c;299人购买https://s.juejin.cn/ds/S6p7MVo/ 前面我们提到过 Nuxt 能够满足我们更多开发场景的需求…

IGKBoard(imx6ull)-I2C接口编程之SHT20温湿度采样

文章目录1- 使能开发板I2C通信接口2- SHT20硬件连接3- 编码实现SHT20温湿度采样思路&#xff08;1&#xff09;查看sht20从设备地址&#xff08;i2cdetect&#xff09;&#xff08;2&#xff09;获取数据大体流程【1】软复位【2】触发测量与通讯时序&#xff08;3&#xff09;返…

日志收集笔记(Kibana,Watcher)

1 Kibana Kibana 是一个开源的分析与可视化平台&#xff0c;可以用 Kibana 搜索、查看存放在 Elasticsearch 中的数据&#xff0c;就跟谷歌的 elasticsearch head 插件类似&#xff0c;但 Kibana 与 Elasticsearch 的交互方式是各种不同的图表、表格、地图等&#xff0c;直观的…