CC00065.scala——|Hadoop&Scala.V04|——|Scala.v04|集合|Map|

本文介绍了Scala中的Map容器,包括可变与不可变Map的区别,以及如何定义、访问、修改Map中的元素。示例代码展示了Map的基本操作,如添加、删除元素,以及键值对的交换。此外,还演示了通过拉链操作创建Map的方法。
摘要由CSDN通过智能技术生成
一、Map
### --- Map

~~~     Map(映射)是一系列键值对的容器;Scala 提供了可变的和不可变的两种版本的Map,
~~~     分别定义在包 scala.collection.mutable 和 scala.collection.immutable 里;
~~~     默认情况下,Scala中使用不可变的 Map;
~~~     如果要使用可变Map,必须导入scala.collection.mutable.Map;
~~~     在Map中,键的值是唯一的,可以根据键来对值进行快速的检索。
### --- 编程示例

// 可使用两种方式定义Map
// Map缺省是不可变的,值不能更改
val a = Map("a" -> 1, "b" -> 2, "c" -> 3)
val a = Map(("a", 1),("b", 2),("c", 3))
a.keys
a.values
// 获取Map中的值:
a("a")
// 访问不存在的key时,会抛出异常。Java.util.NoSuchElementException: key not found: x
a("x")
// 使用get方法,返回一个Option对象,要么是Some(键对应的值),要么是None
a.get("a")
// 获取键对应的值,如果键不存在返回给定的值(这里是0)
a.getOrElse("a", 0)
// 更新Map中的值(要使用可变的Map)
val b = scala.collection.mutable.Map("a" -> 1, "b" -> 2, "c" -> 3)
b("a") = 2
// 增加了一个新元素
b("d") = 4
// 用 + 添加新的元素;用 – 删除元素
b += ("e" -> 1, "f" -> 2)
b -= "a"
// 增加元素
val b = Map("a" -> 1, "b" -> 2, "c" -> 3)
val c = b + ("a" -> 10, "b" -> 20)
// 通过包含键值对的二元组创建Map集合
val a = Map(("a", 1),("b", 2),("c", 3))
// 逐个访问 value
for(v <- a.values) println(v)
// key 和 value 做了交换
val b = for((k,v) <- a) yield (v,k)
// 下面才是具有scala风格的写法,推荐
a.map(x=>(x._2, x._1))
// 拉链操作创建Map
val a = Array(1,2,3)
val b = Array("a","b","c")
//c: Array[(Int, String)]
val c = a.zip(b)
//c: scala.collection.immutable.Map[Int,String]
val c = a.zip(b).toMap
二、编程实现
### --- 编程代码

package yanqi.cn.part09

import scala.collection.mutable

object MapDemo {
  def main(args: Array[String]): Unit = {
    //使用两种方式定义Map
    val map1 = Map("a" -> 1, "b" -> 2)
    val map2 = Map(("a", 1), ("b", 2))

    map1.keys.foreach(println(_))
    map1.values.foreach(println(_))

    //如果访问不存在的Key值时,会抛出异常
    //    println(map1("c"))

    //也可以使用get方法,来获取与Key值相对应的Value值。
    //get方法会返回一个Option对象,要么要是Some(有值),要么是None(无值)
    val num: Option[Int] = map1.get("c")
    num match {
      case None => println("None")
      case Some(x) => println(x)
    }

    //获取Key值所对应的Value值,如果键Key不存在,那么就返回指定的默认值
    val num2: Int = map1.getOrElse("d", 0)
    println(num2)

    //创建一个可变的Map
    val map3 = scala.collection.mutable.Map("a" -> 1, "b" -> 2)
    println(map3)
    map3("a") = 10
    println(map3)

    //增加一个元素
    map3("c") = 3
    println(map3)

    //通过+=添加元素,-=删除元素
    map3 += ("d" -> 4, "f" -> 5)
    println(map3)
    map3 -= "d"
    println(map3)

    //将Key与Value的值互换
    val kv: mutable.Map[Int, String] = for ((k, v) <- map3) yield (v, k)
    println(kv)
    //推荐使用下面的方式将Key与value的值互换
    map3.map(x=>(x._2,x._1)).foreach(println(_))

    //通过拉链操作创建Map
    val a=Array(1,2,3)
    val b=Array("a","b","c")
    val c: Array[(Int, String)] = a.zip(b)
    val d: Map[Int, String] = a.zip(b).toMap
    println(d)
  }
}
### --- 编译打印

D:\JAVA\jdk1.8.0_231\bin\java.exe "-javaagent:D:\IntelliJIDEA\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=60353:D:\IntelliJIDEA\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath D:\JAVA\jdk1.8.0_231\jre\lib\charsets.jar;D:\JAVA\jdk1.8.0_231\jre\lib\deploy.jar;D:\JAVA\jdk1.8.0_231\jre\lib\ext\access-bridge-64.jar;D:\JAVA\jdk1.8.0_231\jre\lib\ext\cldrdata.jar;D:\JAVA\jdk1.8.0_231\jre\lib\ext\dnsns.jar;D:\JAVA\jdk1.8.0_231\jre\lib\ext\jaccess.jar;D:\JAVA\jdk1.8.0_231\jre\lib\ext\jfxrt.jar;D:\JAVA\jdk1.8.0_231\jre\lib\ext\localedata.jar;D:\JAVA\jdk1.8.0_231\jre\lib\ext\nashorn.jar;D:\JAVA\jdk1.8.0_231\jre\lib\ext\sunec.jar;D:\JAVA\jdk1.8.0_231\jre\lib\ext\sunjce_provider.jar;D:\JAVA\jdk1.8.0_231\jre\lib\ext\sunmscapi.jar;D:\JAVA\jdk1.8.0_231\jre\lib\ext\sunpkcs11.jar;D:\JAVA\jdk1.8.0_231\jre\lib\ext\zipfs.jar;D:\JAVA\jdk1.8.0_231\jre\lib\javaws.jar;D:\JAVA\jdk1.8.0_231\jre\lib\jce.jar;D:\JAVA\jdk1.8.0_231\jre\lib\jfr.jar;D:\JAVA\jdk1.8.0_231\jre\lib\jfxswt.jar;D:\JAVA\jdk1.8.0_231\jre\lib\jsse.jar;D:\JAVA\jdk1.8.0_231\jre\lib\management-agent.jar;D:\JAVA\jdk1.8.0_231\jre\lib\plugin.jar;D:\JAVA\jdk1.8.0_231\jre\lib\resources.jar;D:\JAVA\jdk1.8.0_231\jre\lib\rt.jar;E:\NO.Z.10000——javaproject\NO.Z.00002.Hadoop\ScalaPro\out\production\ScalaPro;D:\JAVA\scala-2.12.2\lib\scala-library.jar;D:\JAVA\scala-2.12.2\lib\scala-reflect.jar yanqi.cn.part09.MapDemo
a
b
1
2
None
0
Map(b -> 2, a -> 1)
Map(b -> 2, a -> 10)
Map(b -> 2, a -> 10, c -> 3)
Map(b -> 2, d -> 4, a -> 10, c -> 3, f -> 5)
Map(b -> 2, a -> 10, c -> 3, f -> 5)
Map(2 -> b, 5 -> f, 10 -> a, 3 -> c)
(2,b)
(5,f)
(10,a)
(3,c)
Map(1 -> a, 2 -> b, 3 -> c)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

yanqi_vip

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

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

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

打赏作者

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

抵扣说明:

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

余额充值