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數據類型:

數據類型 描述
Byte 8位有符號整數。數值區間-128 ~ 127
Short 16位有符號整數。數值區間-32768 ~ 32767
Int 32位有符號整數。數值區間 -2147483648 ~ 2147483647
Long 64位有符號整數。 -9223372036854775808 ~ 9223372036854775807
Float 32位IEEE 754 單精度浮點數
Double 64位IEEE 754 雙精度浮點數
Char 16位無符號Unicode字符。區間值爲U+0000 ~ U+FFFF
Boolean true或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
      

在這裏插入圖片描述

常用集合如下:

名稱 可變/不可變 示例
Buffer mutable val buffer = scala.collection.mutable.ArrayBuffer[Int](10, 20, 30); buffer+=(2,3)
Array mutable val arr=Array(1,2,3)
List immutable val lst=List(1,2,3)
Map mutable val stu= Map(“name” -> “Jason”, “age” -> “18”)
Set mutable/immutable val set=Set(1,2,3)
Vector immutable val v=Vector(1, 3, 5, 7, 11, 13)
Stack mutable/immutable val st=scala.collection.mutable.Stack(1,2,3) //堆棧,先進後出
Queue mutable/immutable val q=scala.collection.mutable.Queue(1,2,3) //隊列,先進先出
BitSet mutable/immutable val bit=scala.collection.mutable.BitSet(3,2,0) //位集合
ListMap immutable val map = scala.collection.immutable.ListMap(1->“one”, 2->“two”)
HashSet mutable val set= scala.collection.mutable.HashSet(1,2,3)
HashMap mutable val stu= scala.collection.mutable.HashMap(“name” -> “Jason”, “age” -> “18”)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章