Scala系列 (一)Scala基本简介与基础知识

    技术2022-08-11  87

    写在前面: 我是「nicedays」,一枚喜爱做特效,听音乐,分享技术的大数据开发猿。这名字是来自world order乐队的一首HAVE A NICE DAY。如今,走到现在很多坎坷和不顺,如今终于明白nice day是需要自己赋予的。 白驹过隙,时光荏苒,珍惜当下~~ 写博客一方面是对自己学习的一点点总结及记录,另一方面则是希望能够帮助更多对大数据感兴趣的朋友。如果你也对 大数据与机器学习感兴趣,可以关注我的动态 https://blog.csdn.net/qq_35050438,让我们一起挖掘数据与人工智能的价值~

    csdn居然不支持scala的css样式。。。。。。。。。。。

    文章目录

    一:搭建Scala开发环境:Scala的优势:安装Scala编译器:下载安装包: 二:Scala变量与数据类型:Scala变量与常量:类型别名:Scala数据类型:scala循环控制: 三:Scala数组,元组与集合:Scala数组:Scala元组:Scala集合:

    一:搭建Scala开发环境:

    Scala的优势:

    多范式编程:面向对象编程,函数式编程表达能力强:代码精简

    安装Scala编译器:

    下载安装包:

    http://www.scala-lang.org/download(2.11.8与spark内置版本一致)要求JDK环境

    二:Scala变量与数据类型:

    面向对象特性:

    每个值都是对象对象的数据类型和行为由类和特征描述利用特征实现混入式多重继承

    函数式编程:

    每个函数都是一个值支持高阶函数

    Scala变量与常量:

    变量

    var 变量名称:类型 = xxx //类型可不写,会自动判断

    常量

    val 变量名称:类型 = xxx

    类型别名:

    type 关键字

    type 类型别名 = 类型 // 这是一个对象 object HelloWorld{ // 静态方法专门写在object对象里 unit 为返回值,--返回值为无 // 变量名在前 参数类型在后 冒号隔开 def main(args: Array[String]): Unit = { println("hello"); } }

    Scala数据类型:

    数据类型描述Byte8位有符号整数。数值区间-128 ~ 127Short16位有符号整数。数值区间-32768 ~ 32767Int32位有符号整数。数值区间 -2147483648 ~ 2147483647Long64位有符号整数。 -9223372036854775808 ~ 9223372036854775807Float32位IEEE 754 单精度浮点数Double64位IEEE 754 双精度浮点数Char16位无符号Unicode字符。区间值为U+0000 ~ U+FFFFBooleantrue或falseString字符序列 数据类型描述Any所有类型的超类AnyVal表示值类型的超类AnyRef表示引用类型的超类,对应ObjectUnit表示无值,类似voidNothing所有类型的子类Null表示null或空引用Some表示有一些东西None表示没有一些东西

    scala循环控制:

    for循环 val num: Int = 10; for (k: Int <- 1 to 10){ println("hello") } for (k: Int <- 1 until 10){// 不包含10 println("hello") } 中断和继续 import scala.util.control.Breaks._ //._就是.* val num: Int = 10; for (k: Int <- 1 to num by 2){// 步长为2 if (k >= 5)break() println("hello") } ---或者break跳出breakable代码块 breakable{ for (k: Int <- 1 to num by 2){// 步长为2 if (k >= 5)break() println(k) } } --- continue for (k: Int <- 1 to num by 2){// 步长为2 breakable{ if (k == 5)break() println(k) } } for循环过滤 // 满足 所有的if条件才执行 for (k: Int <- 1 to 10;if k % 2 == 0; if k >= 5){// 步长为2 println(k) } for循环返回值 循环中的yield会把循环的变量记下来,保存成集合,返回 // 这里返回的是线程安全的vector数组 val arr = for (k: Int <- 1 to 10;if k % 2 == 0) yield k var num = 0 for(num: Int <- 0 to 6){ println(num + "+" + (6-num) + "=6") }

    三:Scala数组,元组与集合:

    Scala数组:

    存储固定大小的元素数组索引从0开始 // 数组创建方式 var arr: Array[String] = new Array[String](3) // 创建方式2 var arr2 = Array("","","") // 创建方式三 var arr3 = Array.range(1,10,2)

    Scala元组:

    可以包含不同类型的元素最多支持22个元素使用下划线_访问元素 // 申明方式一 var tuple = ("1","2","3",34) println(tuple_1) println(tuple_2) // 申明方式二 var tuple2 = new Tuple3("12","222",68) // 迭代元组 tuple.productlterator.foreach{ i => println("value=" + i)} // 申明方式三:二元元组 val k = "eee" -> 5 // 嵌套 二元元组 val k = "eee" -> 5 -> 6 -> 7

    // 将元组元素依次赋给三个变量 val ((name,addr),stu) = k

    Scala集合:

    不可变集合

    scala.collection.immutable

    可变集合

    scala.collection.mutable

    常用集合如下:

    名称可变/不可变示例Buffermutableval buffer = scala.collection.mutable.ArrayBuffer[Int](10, 20, 30); buffer+=(2,3)Arraymutableval arr=Array(1,2,3)Listimmutableval lst=List(1,2,3)Mapmutableval stu= Map(“name” -> “Jason”, “age” -> “18”)Setmutable/immutableval set=Set(1,2,3)Vectorimmutableval v=Vector(1, 3, 5, 7, 11, 13)Stackmutable/immutableval st=scala.collection.mutable.Stack(1,2,3) //堆栈,先进后出Queuemutable/immutableval q=scala.collection.mutable.Queue(1,2,3) //队列,先进先出BitSetmutable/immutableval bit=scala.collection.mutable.BitSet(3,2,0) //位集合ListMapimmutableval map = scala.collection.immutable.ListMap(1->“one”, 2->“two”)HashSetmutableval set= scala.collection.mutable.HashSet(1,2,3)HashMapmutableval stu= scala.collection.mutable.HashMap(“name” -> “Jason”, “age” -> “18”)
    Processed: 0.013, SQL: 9