object Scala_study2 {
def main(args: Array[String]): Unit = {
/*
1.2.1 定長陣列和可變陣列
scala中陣列分為定長陣列和可變陣列.預設情況下是不可變(Immutable)陣列;
若要定義可變陣列,需要顯式匯入包
*/
val arrStr = Array("Scala","Spark")
import scala.collection.mutable.ArrayBuffer
val arrayBufferInt = ArrayBuffer[Int]()
/*
1.2.2 陣列常用演算法
*/
arrStr(0) = "Storm" //使用()取下標
arrStr.toBuffer //將不可變陣列轉換成可變陣列
for(i <- 0 until arrStr.length)
println(arrStr(i)) //遍歷
for(elem <- arrStr)
println(elem) //遍歷
arrayBufferInt += 1 //可變陣列可以用+=在尾端新增元素
arrayBufferInt += (2,3,4,5) // 可變陣列可以用+=在尾端新增多個元素
arrayBufferInt ++= Array(6,7,8,9,10,11,12) //可變陣列可以用++=在尾端新增任何集合
arrayBufferInt.trimEnd(2) //除移最後的2個元素
arrayBufferInt.remove(2) //除移下標為2的元素
arrayBufferInt.remove(2,4) //除移從下標為2的元素開始的4個元素
arrayBufferInt.toArray //將可變陣列轉為不可變陣列
/*
* 1.2.3 Map對映
* 預設情況下scala使用不可變的對映,如果想使用可變集,必須明確匯入scala.collection.mutable.Map類
*
* */
val bigData = Map("Scala" -> 35, "Hadoop" -> 30, "Spark" -> 50)
println(bigData("Scala"))//通過鍵,獲得值
println(bigData.contains("Hadoop"))//是否包含給定的鍵
println(bigData.getOrElse("Spark",70))//通過鍵獲得值,如果不包含給定鍵,則返回給定的值
println(bigData.mkString(" { "," , "," } "))
println(bigData.drop(2))
//構造可變集合
val bigDataVar = scala.collection.mutable.Map("Scala" -> 35, "Hadoop" -> 30, "Spark" -> 50)
bigDataVar("Spark") = 100 //更新鍵值對,如果不存在則新增之
bigDataVar += ("Kafka" -> 69) //使用+=新增
bigDataVar += ("Kafka" -> 69) //使用-=刪除
for( (k,v) <- bigDataVar)
println(k + ":" + v)
for(k <- bigDataVar.keySet)
println(k)
/*
* 1.2.4 Tuple元組
* 元組是()包住的資料集合,裡面可以存放不同型別
* */
val tuple1 = (1,"Hello")
println(tuple1._1) //列印第一個元素
println(tuple1._2) //列印第二個元素
/*
* 1.2.5 List(用連結串列實現)
* */
val fruit:List[String] = List("apples", "oranges", "pears")
val nums:List[Int] = List(1,2,3,4)
val empty:List[Nothing] = List() //定義空list
val dim:List[List[Int]] = List(
List(1,0,0),List(0,1,0),List(0,0,1)
) //定義二維列表
//列表定義的另一種方式
//Nil代表空列表
val fruit2 = "apples" :: ("oranges" :: ("pears" :: Nil))
val nums2 = 1 :: (2 :: (3 :: (4 :: Nil)))
val empty2 = Nil
val dim2 = (1 :: (0 :: (0 :: Nil))) ::
(0 :: (1 :: (0 :: Nil))) ::
(0 :: (0 :: (1 :: Nil))) ::
Nil
fruit.head //head方法去除第一個元素
fruit.tail //除了第一個值外的所有元素構成的列表
fruit.isEmpty //判斷是否為空
//用:::或者List.:::或者List.concat串聯列表
val fruit3 = "apples" :: ("oranges" :: ("pears" :: Nil))
val fruit4 = "mangoes" :: ("banana" :: Nil)
var fruit5 = fruit3 ::: fruit4
fruit5 = fruit3.:::(fruit4)
fruit5 = List.concat(fruit3,fruit4)
/*
* 1.2.6 Set
*
*
* */
var s : Set[Int] = Set()
s = Set(1,3,5,7)
}
}