林子雨-2.2 Scala基础知识

目录

 

1、scala与java的if else的不同

2、for

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

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

3、异常

4、循环控制

4.1 终止从当前开始的所有循环

4.2 终止当次循环,继续下一个循环对象

5、数组

6、元组 

7、容器 collection

7.1 序列容器

7.2 列表

7.3 Vector 

7.4 Range:即使数据结构也是容器

7.5 集合

7.6 映射 Map


1、scala与java的if else的不同

scala中的if表达式可以有值

val x=6
val a=if(x>0) 1 else -1

2、for

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

变量 <- 表达式被称为生成器,支持多个生成器,用分号隔开

表达式:Range(a,b,c) 起始、终点、步长

 1 to 5 by 2   步长为2

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

if条件满足时才执行语句块中的内容2.3

val r=for(i <- Array(1,2,3,4,5) if i%2==0) yield {println(i); i}

yield中的i返回给r,每一次for的i都不同所以r最后是一个数组

输出2,4

r:Array[Int]=Array(2,4)

3、异常

Java中分为受检异常和不受检异常

受检异常:程序员自己知道可能会发生哪些错误并给出处理方法

不受检异常:运行时才抛出来

scala中都是不受检异常

用try catch处理

4、循环控制

scala.util.control

4.1 终止从当前开始的所有循环

4.2 终止当次循环,继续下一个循环对象

5、数组

相同类型的数据聚合

val str=new Array[String](3) 声明长度为3的字符串数组,每个数组元素初始化为null

val a=Array(1,3,4)  通过小括号来访问数组内的元素   不一定要给出类型,因为有自动类型推断机制

println(a(0))

多维数组:

三行四列的二维数组

myMatrix(0)(1)

6、元组 

对多个不同类型对象的一种简单封装

用括号封起来就表示是个元组,通过“ ._ ”访问其中的元素

val tuple=("Big",2018,9)

println(tuple._1)

//Big

当一个方法执行完后可能需要返回多个不同数据类型的对象

tuple可返回多个不同类型对象

7、容器 collection

scala提供了非常丰富的容器库:序列、集合、映射

容器类的三个包:

scala.collection封装了一些超类和特质(特质=java的接口)

继承:

Seq,Set,Map的区别:

索引方式:

Seq(比如向量)按0,1,2等进行索引

Map按键索引

Set是乱序的,无索引结构

7.1 序列容器

序列容器的根:scala.collection.Seq

序列中的两个子特质:LinearSeq、IndexedSeq

不同的子特质满足不同的应用需求:LinearSeq适合取头或者取尾巴操作,而IndexedSeq有高效的随机存取操作

7.2 列表

列表从LinearSeq继承而来,列表是一个具体的容器类:具有相同类型且不可变,声明时就必须初始化(.head;.tail)

初始化:var strList=List("big","spark")

访问头尾:.head   .tail

合并列表:val otherList="apache"::strList   //没有覆盖原来的strList,而是生成了新的副本,把新的副本赋值给了otherList

快速得到一个列表:val intList = 1::2::3::Nil

“::”表示右结合,从右到左结合

7.3 Vector 

Vector添加新元素:+:与:+

7.4 Range:即使数据结构也是容器

是一种特殊的带索引的等差数列

new Range(1,5,2)

1 utill 5

1 to 10 by 2

7.5 集合

其中元素不允许重复

集合中通过Hash方法快速查询到值,而列表通过遍历,比集合慢得多

可变与不可变的Set:

?缺省情况下创建的是不可变的Set

var mySet = Set("Hello","spark")      //scala中不用new也可以创建一个对象  对象本身是不可变集 但变量是可变的

mySet += "Scala"      //生成新的不可变集 并重新赋值给mySet,相当于mySet的指针变了一下

?可变Set的创建

import scala.collection.mutable.Set

val myMutableSet=Set("a","b")   //可变集赋值给不可变量

myMutableSet += "Cloud Computing"    //把指针指向的数据集改变了(多加了一个Cloud...)

7.6 映射 Map

数据结构,键值对,键唯一,值不唯一

默认也是不可变映射,可变映射要导入scala.collection.mutable.Map

val university = Map("XMU" -> "XiaMen University","PKU" -> "Peking University")

通过键访问值:val xmu = if(university.contains("XMU")) university("XMU") else 0;println(xmu)

可变的映射(Map):

更新该键已有的值:university2("XMU")="Ximan Uni"

添加新元素(多个用逗号隔开):university2("YNNU")="YunnanNormal Uni"    
或                      university2+=("YNNU"->"YunnanNormal Uni","FZ"->"Fuzhou")

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值