Scala映射Map

在 Scala 中,把哈希表这种数据结构叫做映射, 在 Java 中也叫做映射,在 Python 中把哈希表这种数据结构叫做字典。Scala 的集合有三大类:序列 Seq、集 Set、映射 Map,所有的集合都扩展自 Iterable 。
在 Scala 中集合有可变(mutable)和不可变(immutable)两种类型, immutable 类型的集合初始化后就不能改变了(注意与 val 修饰的变量进行区别)。

构建 Map

// 方式1
val access=Map("cdh-master" -> 1, "cdh-slave01" -> 2,"cdh-slave02" -> 3)

// 方式2
val access=Map(("cdh-master",1), ("cdh-slave01",2), ("cdh-slave02",3))
// Map(cdh-master -> 1, cdh-slave01 -> 2, cdh-slave02 -> 3)

获取Map 中的值

map("cdh-master")            // 1

// 有值则返回值,没有返回设置的值
map.getOrElse("cdh-master",0)

修改 Map 中的值

注意:在 Scala 中有两种 Map,immutable 包下 Map 的内容不可变,另一个是 mutable 包下的 Map 的内容可变。通常在创建一个集合是会用 val 修饰一个变量(相当于 java 中的 final),意味着该变量的引用不可变。该引用中的内容是不是可变,取决于这个引用指向的集合的类型。

// 如果导入不可变map,改变值会报错
import scala.collection.mutable.Map

// val定义的变量意味着变量的引用不可变,但map中的内容可变
val access = Map("id"->1, "uu"->1189)
access("id")=0            // Map(id -> 0, uu -> 1189)

 

Map 常用操作

清空可变 map

val access = scala.collection.mutable.Map("id"->1, "uu"->1189)
access.clear()            // map()

 遍历 map 方式1

for (i <- access)
  println(i)

// (uu,1189)
// (id,1)

  遍历 map 方式2

access.foreach(x => println(x._1 + ":" + x._2))
// uu:1189
// id:1

其他

val map = new scala.collection.mutable.HashMap[String,Int]()    // Map()

// 赋值
map.put("scala",1)        // Option[Int] = None

println(map)             // Map(scala -> 1)

map.put("scala",1)       // Option[Int] = Some(1)

map.contains("scala")    // true

map.get("scala")        // Option[Int] = Some(1)

map.get("Spark")        // Option[Int] = None

Option,None,Some 类型

Option、 None、 Some 是 scala 中定义的类型,它们在 scala 语言中十分常用,因此这三个类型很重要。 None、 Some 是 Option 的子类,它主要解决值为 null 的问题,在 java 语言中,对于定义好的 HashMap,如果 get 方法中传入的键不存在,方法会返回 null,在编写代码的时候对于 null 的这种情况通常需要特殊处理,然而在实际中经常会忘记,因此它很容易引起NullPointerException 异常。在 Scala 语言中通过 Option、 None、 Some 这三个类来避免这样的问题,这样做有几个好处,首先是代码可读性更强,当看到 Option 时,我们自然而然就知道它的值是可选的,然后变量是 Option,比如 Option[String]的时候,直接使用 String 的话,编译直接通不过。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

訾零

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值