1、不可变Map定义
默认情况下map是构造不可变的集合,里面内容不可修改,一旦修改就变成新的map,原有map内容保持不变;
如果想直接new出Map实例,则需要使用HashMap等具体的Map子类;
// 不可变Map
val bigDatas = Map("Spark"->6, "Hadoop"->11)
// 调用工厂方法模式apply来构造Map实例,而需要注意的是Map是接口,在apply中使用了具体的实现
同时其实不可变的,不可对其进行增删改。
2、可变Map定义
// 可变Map
val programingLanguage = scala.collection.mutable.Map("scala" -> 13, "java" -> 23)
programingLanguage("scala") = 30
for((name, age) <- programingLanguage) println(name + " = " + age)
输出:
scala = 30
java = 23
3、HashMap的使用
3.1HashMap定义
val personsInformation = new scala.collection.mutable.HashMap[String, Int]
3.2 增删操作
// 增加元素
personsInformation("Jerry") = 32;
personsInformation("Tom") = 12;
personsInformation += ("Marry" -> 45, "Chare" -> 11)
// 删除元素
personsInformation -= ("Marry")
for((name, age) <- personsInformation) println(name + " : " + age)
输出:
Jerry : 32
Chare : 11
Tom : 12
3.3 getOrElse的使用
查询一个Map中的值一定要采用getOrElse的语法(因为如果查询值不在Map中,一方面在key不存在的情况下不报异常,可能会报以下错误:
“java.util.NoSuchElementException: key not found: Bob”;
另外一个神奇的作用就是提供默认值,而关于默认值的提供在实际开发中至关重要,在spark中很多默认值都是通过getOrElse的方式来实现。
// java.util.NoSuchElementException: key not found: Bob
// println(personsInformation("Bob"))
println(personsInformation.getOrElse("Bob", 23))// 查询Jerry对应的值,没有则打印23,有则打印对应value
输出:
23
3.4 获取key或者value
// 只打印key
for(key <- personsInformation.keySet) println( key )
// 只打印value
for(value <- personsInformation.values) println( value )
输出:
Jerry
Chare
Tom
32
11
12
3.5 使用yield将key\value倒置
val result = for((key, value) <- personsInformation) yield(value, key)
for((key, value) <- result) println(key + " : " + value)
输出:
32 : Jerry
11 : Chare
12 : Tom
4、排序的Map(SortedMap)的定义以及使用
使用SortedMap可以得到排序的Map集合。
// 定义一个排序的Map
val persons = scala.collection.immutable.SortedMap("c" -> 3, "a" -> 2, "e" -> 1, "b" -> 99)
for((key, value) <- persons) println(key + " : " + value)
输出:
a : 2
b : 99
c : 3
e : 1
5、LinkedHashMap的定义
LinkedHashMap可以记住插入数据的顺序,这在实际开发中非常有用;按照输入的顺序进行输出。
val person2 = scala.collection.mutable.LinkedHashMap("c" -> 3, "a" -> 2, "e" -> 1, "b" -> 9)
for((key, value) <- person2) println(key + " : " + value)
输出:
c : 3
a : 2
e : 1
b : 9
6、tuple的定义
1、Tuple中可以有很多不同类型的数据;
2、在企业级实际开发大数据的时候一定会反复的使用Tuple来表达数据结构,以及使用Tuple来处理业务逻辑;
3、Tuple的另外一个非常重要的作用是作为函数的返回值,在Tuple中返回若干个值。
// 定义一个tuple
val personIntroduce = ("Jerry", "male", 23, "FUZHOU", "It's a good boy")
println("My name is " + personIntroduce._1 + ". I'm " + personIntroduce._3 + " years old !")
输出:
My name is Jerry. I'm 23 years old !