Map爲何很重要?python
若是咱們有海量的數據,基於Map檢索會很是快!!!可是若是在array中會很慢,尤爲是修改的時候數據結構
而Tuple能夠是不一樣類型的對象放在同一個數據結構中app
不管是Map仍是Tuple,都是Scala或者Spark最經常使用的數據結構函數
package com.dt.spark.scala.basicsoop
object HelloMapTuple {this
def main(args:Array[String]){spa
/**scala
* 調用工廠方法來構造Map實例,而Map是接口!!apply中使用了具體的實現對象
* 1.默認狀況下,Map構造的是不可變集合,裏面的內容不可修改,一旦修改變成新的Map,原有Map的內容保持不變排序
* 2.Map的實例是調用apply方法去構建的
* 3.若是想new出Map實例,就必須使用HashMap等子類
*/
val bigDatas=Map("Spark" -> 6,"Hadoop" -> 11)
val persons=Map(("Spark",6),("Hadoop",11))
val programLanguage=scala.collection.mutable.Map("Scala"->13,"Java"->23)
programLanguage("Scala")=15
/**
* 4.檢索一個Map中的值,必定是採用getOrElse方法,一方面在key不存在的時候不報異常
* 另一方面就是能夠提供默認值,而關於默認值的提供在實際開發中相當重要
* 在Spark中不少默認的配置就是經過getOrElse來實現的
*/
println(programLanguage.getOrElse("Python", -1))
for((name,age) <- programLanguage) println(name+":"+age)
val personInfos=new scala.collection.mutable.HashMap[String,Int]()
personInfos += ("Scala"->13,"Java"->23)
personInfos -= "Java"
for((name,age) <- personInfos) println(name+":"+age)
for(key <- personInfos.keySet) println(key)
for(value <- personInfos.values) println(value)
val resultMap=for((name,age) <- personInfos) yield (age,name)
for((age,name) <- resultMap) println(age+":"+name)
/**
* 5.使用SortedMap能夠獲得排序的Map集合
*/
val sortedMap=scala.collection.immutable.SortedMap("DTSpark"->45,"b"->23)
for((name,age) <- sortedMap) println(name+":"+age)
/**
* 6.LinkedHashMap能夠記住插入的數據的順序,這在實際開發中很是有用
*/
val linkedHashMap=scala.collection.mutable.LinkedHashMap[String,Int]()
linkedHashMap += "Scala" -> 13
linkedHashMap += "Java" -> 27
linkedHashMap += "python" -> 10
for((name,age) <- linkedHashMap) println(name+":"+age)
/**
* 1.Tuple中能夠有不少類型的數據
* 2.在企業級實際開發中,必定會反覆使用Tuple去處理業務邏輯
* 3.Tuple的另一個很重大的做用就是做爲函數的返回值,在Tuple中能夠返回若干個值,例如:
* val (sched, ts) = SparkContext.createTaskScheduler(this, master)
_schedulerBackend = sched
_taskScheduler = ts
*/
val t=("john","male",30,"love spark")
println(t._1)
}
}
概括總結:1.Map的好處和Tuple的好處
2.看一下Map的構造,理解以前所講的內容
3.關於可變Map和不可變Map
4.檢索一個Map中的值,應該採用的方法
5.SortedMap和LinkedHashMap
6.Tuple的重大做用