scala的概念:
scala是运行在JVM上的多范式(多种风格)编程语言,同时支持面向对象和面向函数编程
java编译执行过程
java源码 通过javac编译 ------>编译成.class文件,把.class文件和java类库到jvm加载—> jvm到操作系统去解释执行
scala的编译执行过程
scala 源码 通过scalac 编译----->编译成.class文件,把.class文件和scala类库和java类库 到jvm上进行加载------->jvm到操作系统上加载
scala的sdk就是scala的编译器
启动scala 解释器
1 window +r
2 输入scala 密令
退出scala 解释器
输入:quit
定义变量
格式: val 或者 var 变量名:数据类型=值
注意: val 定义的变量是不可以重新赋值的
var 定义的变量时可以重新赋值的
惰性赋值
概念: 当有一些变量保存的数据较大时,但是不需要马上加载到jvm内存,可以使用惰性赋值来提高效率
格式:
lazy val / var 变量名 =值(表达式)
字符串
双引号
val / var 变量名 = “字符串”
插值表达式
var /val 变量名=s"${变量/表达式}"
三个引号
val /var 变量名 =""" 文本内容”“”
数据类型
java和scala定义变量的区别
== 和eq 的区别
== 比较的是值
equal 比较的是地址是
数据结构
基本数据类型
引用数据类型
条件表达
格式:和java一样
if (条件) 返回结构 else 返回结果
块表达式
值: 就是最后一个表达式的值
循环
格式 :
for ( i < - 集合或者数组){
// 打印的值
}
嵌套循环
守卫
就是 添加一些条件
格式:
for( i < - 数组/集合 if(条件) ){
// 表达式
}
for 推导式
for的推导式 将一批数据可以处理成一批新数据
格式: for( i <- 集合/数组) yield i * 10
while 循环
1 定义一个变量 (开始的位置)
var i= 0(开始的位置)
可以从奇数和偶数开始
2 while( i <- 10(到多少)){
println(i)
i =i+1
}
break continue
1
导包
2格式
break
breakable{
for( i <- 集合或者数组){
if(条件){
// 不符合的 break()
}else{
符合的}
}
}
continue 符合条件的或者不符合条件的进行跳出
格式
for( i < - 格式){
breakable{
if(条件) {
// 符合
break()
}else{
// 不符合的
}
}
}
方法的定义
注意:定义方法是返回值类型是不能省略的
例子
方法参数
1默认参数
2带名参数
3变长参数
方法的调用方式
1后缀吊用法
格式: 对象名.方法名
2 中缀调用法
花括号调用法
无括号调用法
函数的定义
函数的调用
方法可以转化为函数
格式: 方法名 _ 就转为函数了可以作为值进行传递
数组
定长数组
格式
给数组赋值
通过索引获取值
获取数组的长度
数组名.length
变长数组
1导包
变长数组的操作
通过索引修改某个元素
数组名(index)=value(新的值)
数组的遍历
第二种通过索引
until 包含0 不包含最后一个
数组的常用算法
求和
最大值
最小值
升序和降序
元组
格式:
括号只有两个元素的时候使用箭头
访问元组用的是下划线
变量名._
元组元素的修改
列表(不可变)
格式:
一个不为空的列表
为空的列表
可变列表
可变列表的操作
获取第一个元素
添加一个元素到列表中
一个列表添加一个新的列表
一个列表删除一个元素
可变列表转为不可变列表
列表的超用操作(两种列表都可以使用的)
获取列表的首个和剩余的元素
反转
获取前缀和后缀
后缀:除了前几个 ,剩余的部分
扁平化操作
将一个列表中的多个列表处理成一个新的列表
例子
拉链 和拉开
拉链:使用zip 将两个列表,组合成一个元素为元组的列表
拉开: 将一个包含元组的列表,解开成包含两个列表的元祖
并集不去重
交集
差集
a-b 相同的删除 ,把a 剩余的存储起来
set
不可变集
创建
基本操作
减 一个元素
添加一个元素 及添加一个set 集合
可变集
导入包
map
不可变
元组创建map
可变map
修改key的value
用外循环遍历迭代
for循环
注意:迭代完了就没数据了
函数的编程
1foreach的遍历三种方式
要求
一种类型转为另外一种类型(旧的转为新的数据)
只出现一次,可以省略=》 和x
扁平化
过滤
排序
排序2
排序3(自定义排序)
group
聚合
聚合初始值
从什么时候开始计算