首页 > 其他分享 >Scala 的Map集合

Scala 的Map集合

时间:2024-11-13 15:18:28浏览次数:3  
标签:Map Scala 元素 map1 key 可变 集合

  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 = {
    // 可变Map
    val 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 foreach
    for ((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 = {
    //不可变Map
    val map1 = Map("鄂" -> "湖北省", "湘" -> "湖南省")

    //1.添加
    val map2 = map1 + ("豫" -> "河南省")
    //如果key存在,就是修改
    //    val map3 = map1 + ("鄂"->"河南省")

    //2.删除。只需要提供key
    val 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 foreach
    for ((key, value) <- map1) {
      println(s"$key 是 ${value} 的简称")
    }

    //    map1.foreach{case (key,value) => {
    //      println(s"$key 是 ${value} 的简称")
    //    }}
  }
}

标签:Map,Scala,元素,map1,key,可变,集合
From: https://blog.csdn.net/2301_81748087/article/details/143685298

相关文章

  • 科研绘图系列:R语言功能通路表达热图(heatmap)
    文章目录介绍加载R包数据下载导入数据数据预处理热图:所有通路结果系统信息介绍R语言功能通路表达热图加载R包library(readxl)library(ggpubr)library(ggh4x)library(ggtext)library(tidyverse......
  • Scala 中的Map 映射
    类型:不可变操作:添加元素,删除元素,查询元素,修改元素,遍历一、 不可变的:objectTest10{defmain(args:Array[String]):Unit={//不可变valmap1=Map("鄂"->"湖北省","湘"->"湖南省","青"->"青岛市")}}1)添加元素val......
  • MapReduce初级编程实践:编程实现文件合并和去重操作
    实验环境:操作系统:Linux(Centos7);  Xsell7Hadoop版本:3.4.0(这里的版本根据自己的修改,可能小部分版本的Hadoop不适用于本文实验)对于两个输入文件,即文件A和文件B,请编写MapReduce程序,对两个文件进行合并,并剔除其中重复的内容,得到一个新的输出文件C。下面是输入文件和输出文件......
  • MapReduce初级编程实践:编写程序实现对输入文件的排序
     实验环境:操作系统:Linux(Centos7);  Xsell7Hadoop版本:3.4.0(这里的版本根据自己的修改,可能小部分版本的Hadoop不适用于本文实验)现在有多个输入文件,每个文件中的每行内容均为一个整数。要求读取所有文件中的整数,进行升序排序后,输出到一个新的文件中,输出的数据格式为每行两......
  • 【SigmaPlot 15.0.0.13软件下载与安装教程】
    1、安装包SigmaPlot15:链接:https://pan.quark.cn/s/b5103c671458提取码:1fsQ2、安装教程(过程安装建议关闭杀毒软件)1)       双击SigmaplotInstaller.exe安装,弹窗安装对话框  2)       点击Next   3)       选择Iaccept,点击Next  ......
  • c++(vector、map、list、deque、set)总结-面试
    目录1.vector2.deque3.list4.map5.set6.queue7.stack8.STL容器使用时机希望在面试和学习过程中可以帮助大家梳理重点C++中有两种类型的容器:顺序容器和关联容器。顺序容器主要有vector、list、deque等。其中vector表示一段连续的内存,基于数组实现,list表示非连续......
  • nextjs 动态生成sitemap.xml 文件
    在app目录下创建文件sitemap.js,默认导出sitemap方法importfsfrom"fs";importpathfrom"path";constbaseUrl=process.env.NEXT_PUBLIC_SITE_URL||"https://www.adog.life";constbaseDir="src/app";constdynamicDirs=[......
  • MapReduce解析简历存储到Postgres数据库
    目录一、功能描述二、代码实现1、代码结构2、ResumeDBWritable代码3、ResumeWritable代码4、ResumeSDK代码 5、ResumeDBMapper代码6、ResumeDBReducer代码7、ResumeDBPartationer代码8、ResumeDBDriver代码一、功能描述简历数据经过ETL流程,已经上传到HDFS上,需要针......
  • 常用字符串和集合处理工具类
    常用字符串和集合转换工具一、Hutool工具1、概述2、主要功能2.1、文件操作2.2、日期时间处理2.3、JSON处理:(建立使用Gson)2.4、字符串处理2.5、集合操作2.6、对象拷贝2.7、网络请求2.8、加密解密二、Gson工具1、概述2、主要功能2.1、对象转JSON2.2、JSON转对象三......
  • Scala练习
    importscala.collection.mutable.ListBuffer//1.使用caseclass创建图书信息类Book:caseclassBook(ID:String,bookName:String,author:String,price:Double,varamount:Int)objectdemo1{defmain(args:Array[String]):Unit={//2.创建一个名为BookList......