1函数和方法的区别

方法存在在对象或者类中,运行时加载到JVM的方法区,但是函数本身就是一个对象。运行时加载到JVM堆中。函数在scala编译时回单独产生一个class文件名字functionN(N为参数的个数)。另外使用 _ 可以将方法转为函数
函数定义:
def add(x:Int,y:Int)=x+y
完全体 :val func: (Int, Int) => Int = (x, y) => x + y

2.常见数据结构

2.1数组

scala中,有两种数组,一种是定长数组,另一种是变长数组

2.1.1变长数组

  1. 通过指定长度定义数组
  2. val/var 变量名 = new Array[元素类型](数组长度)
  3. 用元素直接初始化数组
  4. val/var 变量名 = Array(元素1, 元素2, 元素3...)

2.1.2变长数组

  1. 创建变长数组,需要提前导入ArrayBuffer`import scala.collection.mutable.ArrayBuffer`
  2. 创建空的ArrayBuffer变长数组,语法结构:
  3. val/var a = ArrayBuffer[元素类型]()
  4. 创建带有初始元素的ArrayBuffer
  5. val/var a = ArrayBuffer(元素1,元素2,元素3....)
  6. val a1 = ArrayBuffer()
  7. val a = ArrayBuffer("hadoop", "spark", "flink")
  8. a: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer(hadoop, spark, flink)
  9. // 追加一个元素
  10. scala> a += "flume"
  11. res10: a.type = ArrayBuffer(hadoop, spark, flink, flume)
  12. // 删除一个元素
  13. scala> a -= "hadoop"
  14. res11: a.type = ArrayBuffer(spark, flink, flume)
  15. // 追加一个数组
  16. scala> a ++= Array("hive", "sqoop")
  17. res12: a.type = ArrayBuffer(spark, flink, flume, hive, sqoop)
  18. 遍历数组
  19. for(i<-array) println(i)

2.2元组

  1. val/var 元组 = (元素1, 元素2, 元素3....)
  2. 使用箭头来定义元组(元组只能有两个元素)
  3. val/var 元组 = 元素1->元素2
  4. val a = (1, "zhangsan", 20, "beijing")
  5. a: (Int, String, Int, String) = (1,zhangsan,20,beijing)

2.3List

2.3.1不可变列表定义

  1. val/var 变量名 = List(元素1, 元素2, 元素3...)
  2. 使用`Nil`创建一个不可变的空列表
  3. val/var 变量名 = Nil
  4. 使用`::`方法创建一个不可变列表
  5. val/var 变量名 = 元素1 :: 元素2 :: Nil
  6. val a = List(1,2,3,4)

2.3.2可变列表

  1. 先要导入`import scala.collection.mutable.ListBuffer`
  2. val/var 变量名 = ListBuffer[Int]()
  3. 使用ListBuffer(元素1, 元素2, 元素3...)创建可变列表,语法结构
  4. val/var 变量名 = ListBuffer(元素1,元素2,元素3...)
  5. val a = ListBuffer[Int]()
  6. a: scala.collection.mutable.ListBuffer[Int] = ListBuffer()
  7. val a = ListBuffer(1,2,3,4)
  8. a: scala.collection.mutable.ListBuffer[Int] = ListBuffer(1, 2, 3, 4)
  9. // 导入不可变列表
  10. scala> import scala.collection.mutable.ListBuffer
  11. import scala.collection.mutable.ListBuffer
  12. // 创建不可变列表
  13. scala> val a = ListBuffer(1,2,3)
  14. a: scala.collection.mutable.ListBuffer[Int] = ListBuffer(1, 2, 3)
  15. // 获取第一个元素
  16. scala> a(0)
  17. res19: Int = 1
  18. // 追加一个元素
  19. scala> a += 4
  20. res20: a.type = ListBuffer(1, 2, 3, 4)
  21. // 追加一个列表
  22. scala> a ++= List(5,6,7)
  23. res21: a.type = ListBuffer(1, 2, 3, 4, 5, 6, 7)
  24. // 删除元素
  25. scala> a -= 7
  26. res22: a.type = ListBuffer(1, 2, 3, 4, 5, 6)
  27. // 转换为不可变列表
  28. scala> a.toList
  29. res23: List[Int] = List(1, 2, 3, 4, 5, 6)
  30. // 转换为数组
  31. scala> a.toArray
  32. res24: Array[Int] = Array(1, 2, 3, 4, 5, 6)

2.3.3常见方法

  1. 以下是列表常用的操作
  2. - 判断列表是否为空(`isEmpty`
  3. - 拼接两个列表(`++`
  4. - 获取列表的首个元素(`head`)和剩余部分(`tail`)
  5. - 反转列表(`reverse`
  6. - 获取前缀(`take`)、获取后缀(`drop`
  7. - 扁平化(`flaten`
  8. - 拉链(`zip`)和拉开(`unzip`
  9. - 转换字符串(`toString`
  10. - 生成字符串(`mkString`
  11. - 并集(`union`
  12. - 交集(`intersect`
  13. - 差集(`diff`

2.4Set

2.4.1不可变集

创建一个空的不可变集,语法格式:
val/var 变量名 = Set[类型]()
val a = Set[Int]()

基本操作
- 获取集的大小(`size`)
- 遍历集(`和遍历数组一致`)
- 添加一个元素,生成一个Set(`+`)
- 拼接两个集,生成一个Set(`++`)
- 拼接集和列表,生成一个Set(`++`)

2.4.2可变集

 val a = Set(1,2,3,4)
a: scala.collection.mutable.Set[Int] = Set(1, 2, 3, 4)   
可变集合不可变集的创建方式一致,只不过需要提前导入一个可变集类。
手动导入:`import scala.collection.mutable.Set`

2.5Map

2.5.1不可变Map

val/var map = Map(键->值, 键->值, 键->值...)    // 推荐,可读性更好
val map = Map("zhangsan"->30, "lisi"->40)
map: scala.collection.immutable.Map[String,Int] = Map(zhangsan -> 30, lisi -> 40)
val map = Map(("zhangsan", 30), ("lisi", 30))
map: scala.collection.immutable.Map[String,Int] = Map(zhangsan -> 30, lisi -> 30)
// 根据key获取value
map("zhangsan")

2.5.2可变Map

定义语法与不可变Map一致。但定义可变Map需要手动导入`import scala.collection.mutable.Map`
val map = Map("zhangsan"->30, "lisi"->40)
map: scala.collection.mutable.Map[String,Int] = Map(lisi -> 40, zhangsan -> 30)
// 修改value
map("zhangsan") = 20
基本操作
- 获取值(`map(key)`) 
- 获取所有key(`map.keys`)
- 获取所有value(`map.values`)
- 遍历map集合
- getOrElse 获取key的value,如果key不存在,则返回-1
- 增加key,value对 map + ("wangwu"->35) 多个 map + (("ppp", 10), ("iii", 9))
- 删除key map - "lisi"

尚硅谷大数据技术之Scala.docx