Map(映射)是一种可迭代的键值对(key/value)结构。
所有的值都可以通过键来获取。
Map 中的键都是唯一的。
Map 也叫哈希表(Hash tables)。
Map 有两种类型,可变与不可变,区别在于可变对象可以修改它,而不可变对象不可以。
默认情况下 Scala 使用不可变 Map。如果你需要使用可变集合,你需要显式的引入 import scala.collection.mutable.Map 类
在 Scala 中 你可以同时使用可变与不可变 Map,不可变的直接使用 Map,可变的使用 mutable.Map。
更多方法请详见API
package com.fuyun.bigdata.scala.collection
object MapDemo {
def main(args: Array[String]): Unit = {
// 定义Java中的Map实例对象
import java.util
val hashMap: util.HashMap[String, Int] = new util.HashMap[String, Int]()
hashMap.put("spark", 1243)
hashMap.put("hive", 233)
hashMap.put("scala", 999)
hashMap.put("python", 233333)
hashMap.put("hadoop", 3222)
hashMap.put("spark", 333) //将会覆盖上面key为spark的值,因为Map的key必须唯一
// TODO: 将Java中的HashMap集合转换为Scala中的Map集合实例对象
// ._表示包下的所有类
import scala.collection.JavaConverters._
val map: scala.collection.mutable.Map[String, Int] = hashMap.asScala // 隐式转换
map.foreach(println(_))
val map1 = Map("python" -> 2, "scala" -> 5, "spark" -> 6)
val map2 = Map()
// 获取Map中的key
println("map1 keys is : " + map1.keys)
// 获取Map中的values
println(s"map1 values is : ${map1.values}")
// 检查Map是否为空
println(s"map1 is empty : ${map1.isEmpty}")
println("map2 is empty : " + map2.isEmpty)
// 可以使用 ++ 运算符或 Map.++() 方法来连接两个 Map,如果 Map 中存在相同的 key,
// 合并后的 Map 中的 value 会被最右边的 Map 的值所代替
val maps = map ++ map1
println(s"map ++ map1 is : ${maps.mkString(", ")}")
val maps1 = map.++(map1)
println(s"map.++(map1) is : ${maps1}")
// 查看Map中是否包含指定key
println(s"hive is contains map key ? false or true : ${map.contains("hive")}")
// 返回指定key的value
println(s"hive -> ${map.get("hive")}")
}
}
运行结果:
(hive,233)
(python,233333)
(spark,333)
(scala,999)
(hadoop,3222)
map1 keys is : Set(python, scala, spark)
map1 values is : MapLike(2, 5, 6)
map1 is empty : false
map2 is empty : true
map ++ map1 is : hive -> 233, python -> 2, spark -> 6, scala -> 5, hadoop -> 3222
map.++(map1) is : Map(hive -> 233, python -> 2, spark -> 6, scala -> 5, hadoop -> 3222)
hive is contains map key ? false or true : true
hive -> Some(233)
Process finished with exit code 0