Scala 的Map集合

ops/2024/11/14 12:45:08/

  Map集合有两种类型,可变的与不可变的,区别在于可变对象可以修改,而不可变对象不可以修改。默认情况下Scala使用不可变Map集合,如果需要使用可变Map集合,则需要显式地使用import导入包。在Scala中,可以同时使用可变与不可变的Map集合,不可变的直接使用Map,可变的使用mutable.Map。

1.1Scala的Map继承关系

  HashMap基于哈希表实现可变的版本,基于HashTrie实现不可变版本,与HashSet相似。WeakHashMap相当于一个弱引用的Map,当内存空间不足时,可以释放垃圾、回收空间。SortedMap和TreeMap只提供了不可变版本,SortedMap与SortedSet相似, TreeMap同样也是基于红黑树实现的。LinkedHashMap只提供可变的版本,保持插入集合元素的顺序不变,它也是基于哈希表实现的。ListMap有可变的和不可变的版本,与LinkedHashMap相反。

  Map集合中有一个对应的SychronzedMap,Set和Seq中也有类似的方法,该方法中有很多分支。 SychronzedMap使用多线程,保证线程安全。在多线程开发时,如果要保证线程的安全,可以选择以Sychronzed开头的集合。

1.Scala的Map概述

  Map(映射)是一种可迭代的键值对(Key/Value)结构,所有值都可以通过键来获取,Map中的键都是唯一的。定义Map时,需要为键值对定义类型。

1.Scala的Map的定义

  在Java中,Map是以键对(K,V)的形式存在的,例如(Key1,V1)。在Scala中,Map集合同样是以键值对的方式存在的,应用非常广泛。

2.Scala的Map的创建

  在Scala中,有两种创建Map的方式,分别是Map(k1->v1,k2->v2,..和Map((k1,v1),(k2,v2),...。 Map(k1->v1,k2->v2,...中的k1->v1表示第一个元素,k2->V2表示第二个元素。第二种方式Map((k1, v1),(k2,v2)...是通过元组的方式定义的。

3.Scala的Map的分类

  Scala的Map有两种类型,即可变的和不可变的,这在之前介绍过。上述创建Map的方式是不可变的, 如果想创建可变的Map,需要导入指定的包,创建方式与不可变的方式相同。

1.3 Scala的可变Map常用操作

  Scala的可变Map常用操作有增加、删除、修改、查询等,如表8-2所示。向Map中添加元素,可以直接使用M(k)-V的形式向集合中添加一个键值对。例如,定义一个Map集合,val m=Map(K1-2V1,K2-V2),通过m(K3)=V3向m中添加一个键值对。如果添加的K值存在,会使用新的V替换集合中原有的V值。

  另外,put方法也可以使用(K,V)的形式添加,例如 put(K,V),并返回一个option类型。十=用于添加一个键值对;++=用于添加一个集合。删除操作中的Remove方法会根据K指定的值进行删除, 例如,remove(K1)表示删除与K1对应的V值。调用clear 方法会把元素清空。调用retain(方法可以根据0中表达式为真或假,判断是否保留元素。更新操作与Java 中非常相似,通过M(k)=v的形式进行更新。

  查询操作有两种方式,分别是Get(key)和m(key)。通过m(key)方式中的key会返回对应的V值, 如果不是对应的值,则会抛出异常。如果不想抛出异常,可以使用Get(key)的方式。如果K和V不对应, 则会返回None。提倡使用Get(key)的方式查询值,这样不会影响整体代码的执行效率。

相关代码如下:

//可变的Map,要导入包import scala.collection.mutable//类型:可变
//操作:添加元素,删除元素,查询元素,修改元素,遍历
object mutable_map {def main(args: Array[String]): Unit = {// 可变Mapval map1 = mutable.Map("鄂" -> "湖北省", "湘" -> "湖南省", "青" -> "青海")//1.添加map1 += ("豫" -> "河南省")//2.删除。只需要提供key//map1 -= "鄂"//3.查询//3.1 get方法。输入key,如果找到,就返回包装数据,如果没有找到,就返回None//3.2 直接:map(key名)。如果key不存在,就会报错!//    val rs = map1.get("鄂")//    println(rs.get)println(map1("鄂"))//4.修改元素:把 青->青海,改成 青->青海省map1("青") = "青海省"//5.遍历//5.1 for//5.2 foreachfor ((key, value) <- map1) {println(s"$key 是 ${value} 的简称")}map1.foreach { case (key, value) => {println(s"$key 是 ${value} 的简称")}}}
}

1.4 Scala的不可变Map常用操作

  由于是不可变Map,所以不可以进行更新操作。添加、 删除、查询和遍历操作与之前介绍的操作方法相同,这里不再详细说明。

下面举例说明映射的增加、删除、修改和查询等操作。

相关代码如下:

//类型:不可变,可变
//操作:添加元素,删除元素,查询元素,修改元素,遍历
object map {def main(args: Array[String]): Unit = {//不可变Mapval map1 = Map("鄂" -> "湖北省", "湘" -> "湖南省")//1.添加val map2 = map1 + ("豫" -> "河南省")//如果key存在,就是修改//    val map3 = map1 + ("鄂"->"河南省")//2.删除。只需要提供keyval map3 = map1 - "鄂"//3.查询//3.1 get方法。输入key,如果找到,就返回包装数据,如果没有找到,就返回None//3.2 直接:map(key名)。如果key不存在,就会报错!//    val rs = map1.get("鄂")//    println(rs.get)//    println(map1("鄂1"))//4.修改元素:把 青->青海,改成 青->青海省//    map1("青") = "青海省"val map4 = map1 + ("青" -> "青海省 ")//5.遍历//5.1 for//5.2 foreachfor ((key, value) <- map1) {println(s"$key 是 ${value} 的简称")}//    map1.foreach{case (key,value) => {//      println(s"$key 是 ${value} 的简称")//    }}}
}

http://www.ppmy.cn/ops/133564.html

相关文章

开源共建 | 长安链开发常见问题及规避

长安链开源社区鼓励社区成员参与社区共建&#xff0c;参与形式包括不限于代码贡献、文章撰写、社区答疑等。腾讯云区块链王燕飞在参与长安链测试工作过程中&#xff0c;深入细致地总结了长安链实际开发应用中的常见问题及其有效的规避方法&#xff0c;相关内容多次解答社区成员…

Linux下通过sqlplus连Oracle提示字符是乱码▒▒▒[

先参考https://www.cnblogs.com/wrencai/articles/4374451.html 理解下Oracle编码字符集的概念 如下图,刚开始连上是软吗▒▒▒[ 执行export NLS_LANGJAPANESE_JAPAN.AL32UTF8 (这个仅在当前会话起作用)如果好了,说明字符集是这个,不行在尝试别的字符集 如果要永久设置 vim …

Python练习19

Python日常练习 题目&#xff1a; 打印如下九九乘法表 1*11 2*12 2*24 3*13 3*26 3*39 4*14 4*28 4*312 4*416 5*15 5*210 5*315 5*420 5*525 6*16 6*212 6*318 6*424 6*530 6*636 7*17 7*214 7*321 7*428 7*535 7*642 7*749 8*18 8*216 8*324 8*432 8*540 8*648 8*756 8*86…

「QT」几何数据类 之 QVector4D 四维向量类

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「QT」QT5程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasolid…

java常用工具介绍

1. 集成开发环境&#xff08;IDE&#xff09;&#xff1a; • Eclipse&#xff1a;一个开放源代码的、基于Java的可扩展开发平台。它提供了一个框架和一组服务&#xff0c;用于通过插件组件构建开发环境。Eclipse 还包括用于Java开发的工具&#xff08;Java Development Tools,…

基于SpringBoot的垃圾分类回收系统+LW示例参考

1.项目介绍 系统角色&#xff1a;管理员、普通用户、回收员功能模块&#xff1a;管理员&#xff08;用户管理、回收员管理、垃圾类型管理、商品分类管理、环保商城管理、上门回收管理、订单分配管理、订单管理、系统管理等&#xff09;、回收员&#xff08;订单分配、订单管理…

人工智能理论之opencv图像预处理、数据库、GUI布局的综合应用(图像预处理版块)

文章目录 前言图像预处理卷积核概念图像平滑处理高斯滤波 双边滤波中值滤波Canny边缘检测图像形态学操作形态学梯度顶帽小结 图片预处理1.引入库 图像预处理错误尝试成功运行 总结 前言 对前面学习综合应用的总结&#xff0c;不单是一个版块&#xff0c;而是三个版块综合到一起…

【大数据测试HDFS + Flask详细教程与实例】

大数据测试HDFS Flask 1. 环境准备安装工具安装Hadoop&#xff08;以单机模式为例&#xff09;安装Flask和HDFS Python客户端 2. HDFS Flask基本架构基本文件结构 3. 创建Flask应用与与HDFS交互步骤1&#xff1a;配置HDFS连接步骤2&#xff1a;构建Flask应用 4. 创建前端界面…