![](https://img-blog.csdnimg.cn/2019092715111047.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Scala学习笔记
文章平均质量分 59
本系列文章内容全部来自尚硅谷的武晟然老师的教学视频,仅作为个人的学习笔记,感谢老师的精彩讲解
程光CS
Auf dem Wasser zu singen, Op.72, D.774 - Auf dem Wasser zu singen, Op.72, D.774
展开
-
Scala带参数打印字符串
printf-style格式化字符串是指在字符串中插入由%字符开始的格式指令,很多种语言中都支持这种字符串构造方式。字符串插值是一种将表达式嵌入到字符串字面值中的语法,使得代码更易于编写和阅读。在scala中可使用printf函数来进行printf-style打印。直接拼接字符串来打印。原创 2023-03-28 18:43:10 · 344 阅读 · 0 评论 -
Scala学习笔记(18)——隐式转换和泛型
一、隐式转换当编译器第一次编译失败的时候,会在当前的环境中查找能让代码编译通过的方法,用于将类型进行转换,实现二次编译1.隐式函数隐式转换可以在不需改原类型的代码的情况下,扩展类的功能。例:通过隐式转化为 Int 类型增加函数方法class MyRichInt(val self: Int) { def myMax(i: Int): Int = { if (self < i) i else self } def myMin(i: Int): Int = { if (self &l原创 2021-08-24 10:13:30 · 118 阅读 · 0 评论 -
Scala学习笔记(17)——异常处理
异常处理原创 2021-08-23 09:26:41 · 91 阅读 · 0 评论 -
Scala学习笔记(16)——模式匹配
1.基本语法Scala 中的模式匹配类似于 Java 中的 switch 语法,模式匹配语法中,采用 match 关键字声明,每个分支采用 case 关键字进行声明,当需要匹配时,会从第一个 case 分支开始,如果匹配成功,那么执行对应的逻辑代码,并且退出match。如果匹配不成功,继续执行下一个分支进行判断。如果所有 case 都不匹配,那么会执行 case _分支,类似于 Java 中 default 语句。 //示例:用模式匹配实现简单二元运算 val a = 25 val原创 2021-08-22 11:16:04 · 145 阅读 · 0 评论 -
Scala学习笔记(15)—集合(六)—队列与并行集合
一、队列 // 创建一个可变队列 val queue: mutable.Queue[String] = new mutable.Queue[String]() //进队 queue.enqueue("a", "b", "c") //出队,打印a println(queue.dequeue()) // 不可变队列 val queue2: Queue[String] = Queue("a", "b", "c") //再进队queue2本身原创 2021-08-22 09:58:36 · 152 阅读 · 0 评论 -
Scala学习笔记(14)—集合(五)—集合常用函数
1.基本属性和常用操作 // (1)获取集合长度 println(list.length) // (2)获取集合大小 println(set.size) // (3)循环遍历 for (elem <- list) println(elem) set.foreach(println) // (4)迭代器 for (elem <- list.iterator) println(elem)原创 2021-08-21 11:24:35 · 339 阅读 · 0 评论 -
Scala学习笔记(13)—集合(四)—Set和Map
一、Set集合Set表示无序且无重复数据的集合,默认情况下,Scala 使用的是不可变集合,如果想使用可变集合,需要引用scala.collection.mutable.Set 包。1.不可变SetSet本身是一个trait,不能通过构造器直接创建对象实例,还是通过调用其伴生对象的apply方法创建//1. 创建set,会自动去重val set1 = Set(13, 23, 53, 12, 13, 23, 78)println(set1)//2. 添加元素,生成一个新的set,原set2并不原创 2021-08-20 12:46:53 · 738 阅读 · 0 评论 -
Scala学习笔记(12)—集合(三)—列表List
1.不可变List(1) 创建一个List对象List本身是一个抽象类,不能直接调用其主构造方法来创建对象,而要通过其伴生对象中的apply方法创建val list1 = List(23, 65, 87)println(list1)该apply方法接收一个数组,然后调用ArrayBuffer的toList方法将其转换为List(2) 访问List中的元素...原创 2021-08-20 11:03:35 · 866 阅读 · 0 评论 -
Scala学习笔记(11)—集合(二)—数组
一、数组1.不可变数组Array(1) 定义第一种定义方式val arr1 = new Array[Int](10)第二种定义方式,利用apply方法val arr1 = Array(1, 2)(2) 遍历普通遍历 for (i <- arr01) { println(i) }简化遍历,调用foreach方法arr2.foreach( (elem: Int) => println(elem) )//继续简化arr.foreach( println )(3原创 2021-08-19 17:10:36 · 308 阅读 · 0 评论 -
Scala学习笔记(10)—集合(一)—集合简介
1.集合简介1)Scala 的集合有三大类:序列 Seq、集 Set、映射 Map,所有的集合都扩展自 Iterable特质。2)对于几乎所有的集合类,Scala 都同时提供了可变和不可变的版本,分别位于以下两个包不可变集合:scala.collection.immutable可变集合: scala.collection.mutable建议:在操作集合的时候,不可变用符号,可变用方法2.不可变集合继承图(1) Set、Map 是 Java 中也有的集合,而Seq 是 Java 没有的,可原创 2021-08-19 11:22:52 · 148 阅读 · 0 评论 -
Scala学习笔记(9)——面向对象(二)
一、单例对象(伴生对象)Scala语言是完全面向对象的语言,所以并没有静态的操作(即在Scala中没有静态的概念)。但是为了能够和Java语言交互(因为Java中有静态概念),就产生了一种特殊的对象来模拟类对象,该对象为单例对象。若单例对象名与类名一致,则称该单例对象这个类的伴生对象,这个类的所有“静态”内容都可以放置在它的伴生对象中声明。1.单例对象语法1)基本语法object Person{ val country:String="China"}2)说明(1)单例对象采用 object原创 2021-08-18 18:57:15 · 148 阅读 · 0 评论 -
Scala学习笔记(8)——面向对象(一)
Scala 的面向对象思想和 Java 的面向对象思想和概念是一致的。Scala 中语法和 Java 不同,补充了更多的功能。一、Scala包1.包说明(包语句)在类文件的开头都有一个包语句,包名和源文件所在路径不要求必须一致,也就是说只要文件头声明了属于这个包,那么这个文件实际在哪个目录下并无关系package chapter05包名用“.”进行分隔以表示包的层级关系,如com.atguigu.scala。而Scala相对于Java还有另一种风格,通过嵌套的风格表示层级关系,如下packa原创 2021-08-17 16:59:01 · 155 阅读 · 0 评论 -
Scala学习笔记(7)——函数的控制抽象与惰性加载
一、控制抽象控制抽象是针对函数参数而言,特别是传名参数1.传值参数我们常规的传参就是传入值,可以直接传入值,也可传入一个函数调用,由这个函数返回的值作为传入参数 // 1. 传值参数 def f0(a: Int): Unit = { println("a: " + a) println("a: " + a) } f0(23) def f1(): Int = { println("f1调用") 12 }原创 2021-08-16 19:33:40 · 169 阅读 · 0 评论 -
Scala学习笔记番外篇(1)——程序性能优化
1.递归虽然代码更为简洁,但是要比普通的循环耗费更多的空间资源,在一层函数中需要执行下一层函数,要得到下一层函数返回的结果,根据这个结果再进行额外的计算然后返回结果,当前层函数才能退栈,故只有当执行完最后一层函数返回后,各层函数才能依次退栈,因此需要更多的函数栈帧,甚至有可能导致StackOverflow异常。如果函数返回的只有对自身的调用,而没有其它额外的计算,将计算直接放在函数参数当中,每一层将当前的计算结果当作参数传给下一层,那么一层函数就不需要等待下一层函数返回结果才能退栈,而是直接让下一层函数覆原创 2021-08-16 16:10:38 · 167 阅读 · 0 评论 -
Scala学习笔记(6)——函数柯里化&闭包
一、函数的闭包1.闭包的概念在下面这个函数中,func和f1执行完毕后都从JVM的stack中弹出了,为什么执行f2时还能访问到func和f1中的变量值呢?与Java不同的是,在Scala中函数也是一个对象,当我们调用了一个函数时,相当于在JVM的heap中创建了一个对应的对象实例,所依赖的外部环境和局部变量都保存在这个实例里,这就是所谓的闭包保存的实体def func(i: Int): String=>(Char=>Boolean) = { def f1(s: String)原创 2021-08-16 12:48:02 · 356 阅读 · 0 评论 -
Scala学习笔记(5)——函数编程进阶
一、函数高阶用法函数还有更高阶的用法1.函数可以作为值进行传递使用f 或者f()表示传递函数object TestFunction { def main(args: Array[String]): Unit = { //(1)调用 foo 函数,把返回值给变量 f //val f = foo() val f = foo println(f) //(2)在被调用函数 foo 后面加上 _,相当于把函数 foo 当成一个整体,传递给变量 f1 val f1 = fo原创 2021-08-11 19:51:41 · 174 阅读 · 0 评论 -
Scala学习笔记(4)——函数式编程基础
一、Scala编程的特点Scala是基于Java发展起来的,也拥有面向对象的特点,并且比Java更加面向对象,同时它还借鉴了函数式编程语言的一些特点。在 Scala 中函数式编程和面向对象编程完美融合在一起了。1.面向对象编程解决问题,分解对象,行为,属性,然后通过对象的关系以及行为的调用来解决问题。对象:用户行为:登录、连接 JDBC、读取数据库属性:用户名、密码Scala 语言是一个完全面向对象编程语言。万物皆对象对象的本质:对数据和行为的一个封装2.函数式编程解决问题时,将问题分解原创 2021-08-08 13:44:06 · 114 阅读 · 0 评论 -
Scala学习笔记(3)——流程控制
一、分支控制 if-else一般的if-else使用与C和Java里的一样,不过Scala有一个不同之处:其分支语句可以有返回值 val result: Any = if (age <= 6){ println("童年") "童年" } else if(age < 18){ println("青少年") "青少年" } else if(age < 35){ println("青年") age原创 2021-08-07 16:51:25 · 105 阅读 · 0 评论 -
Scala学习笔记(2)——变量和数据类型
一、注释import chapter01.Student/* 多行注释 这是一个简单的测试程序 */object Test01_Comment { /** * 文档注释 * 程序的入口方法 * @param args 外部传入的参数 */ def main(args: Array[String]): Unit = { // 单行注释 打印输出 println("hello") }}二、变量和常量(重点)1.变量和常量的声明原创 2021-08-03 20:25:42 · 217 阅读 · 0 评论 -
Scala学习笔记(1)——Scala的概念
一、为什么要学习ScalaScala——Java++Scala基于JVM,和Java完全兼容,同样具有跨平台、可移植性好、方便的垃圾回收等特性Scala比Java更加面向对象Scala是一门函数式编程语言Scala更适合大数据处理Scala对集合类型数据处理有非常好的支持Spark的底层用Scala编写二、Scala 和 Java 关系三、Scala语言特点Scala是一门以Java虚拟机(JVM)为运行环境并将面向对象和函数式编程的最佳特性结合在一起的静态类型编程语言(静态语原创 2021-08-03 15:47:28 · 173 阅读 · 0 评论