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

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

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

一:搭建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 ~ 127
Short16位有符号整数。数值区间-32768 ~ 32767
Int32位有符号整数。数值区间 -2147483648 ~ 2147483647
Long64位有符号整数。 -9223372036854775808 ~ 9223372036854775807
Float32位IEEE 754 单精度浮点数
Double64位IEEE 754 双精度浮点数
Char16位无符号Unicode字符。区间值为U+0000 ~ U+FFFF
Booleantrue或false
String字符序列
数据类型描述
Any所有类型的超类
AnyVal表示值类型的超类
AnyRef表示引用类型的超类,对应Object
Unit表示无值,类似void
Nothing所有类型的子类
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”)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值