Scala教程之:可变和不变集合

article/2025/10/14 14:01:27

文章目录

    • mutable HashMap
    • immutable HashMap

集合在程序中是非常有用的,只有用好集合才能真正感受到该语言的魅力。在scala中集合主要在三个包里面:scala.collection, scala.collection.immutable和scala.collection.mutable。

scala中引入不可变集合是为了方便程序的使用并减少在程序中的未知风险。如果一个集合被定义为不可变的,那么我们在使用的过程中就可以指定该集合是不会变化的,可以放心使用。

我们看下这三个包的层次结构:

scala.collection的层次结构如下:
在这里插入图片描述

scala.collection.immutable的层次结构如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZVUNb8CP-1578463808839)(https://docs.scala-lang.org/resources/images/tour/collections-immutable-diagram-213.svg)]

scala.collection.mutable的层次结构如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HXdeWrOy-1578463808839)(https://docs.scala-lang.org/resources/images/tour/collections-mutable-diagram-213.svg)]

接下来我们通过两个HashMap的例子来看一下immutable和mutable的使用。

mutable HashMap

我们看下怎么定义一个mutable hashMap :

import scala.collection.mutable.HashMapprintln("\nStep 1: How to initialize a HashMap with 3 elements")val hashMap1: HashMap[String, String] = HashMap(("PD","Plain Donut"),("SD","Strawberry Donut"),("CD","Chocolate Donut"))println(s"Elements of hashMap1 = $hashMap1")println("\nStep 2: How to initialize HashMap using key -> value notation")val hashMap2: HashMap[String, String] = HashMap("VD"-> "Vanilla Donut", "GD" -> "Glazed Donut")println(s"Elements of hashMap2 = $hashMap2")

怎么取出HashMap中的值:

  println("\nStep 3: How to access elements of HashMap by specific key")println(s"Element by key VD = ${hashMap2("VD")}")println(s"Element by key GD = ${hashMap2("GD")}")

怎么改变hashMap:

  println("\nStep 4: How to add elements to HashMap using +=")hashMap1 += ("KD" -> "Krispy Kreme Donut")println(s"Element in hashMap1 = $hashMap1")println("\nStep 5: How to add elements from a HashMap to an existing HashMap using ++=")hashMap1 ++= hashMap2println(s"Elements in hashMap1 = $hashMap1")println("\nStep 6: How to remove key and its value from HashMap using -=")hashMap1 -= "CD"println(s"HashMap without the key CD and its value = $hashMap1")

怎么定义一个空的HashMap:

  println("\nStep 7: How to initialize an empty HashMap")val emptyMap: HashMap[String,String] = HashMap.empty[String,String]println(s"Empty HashMap = $emptyMap")

immutable HashMap

看一下怎么定义一个immutable HashMap:

  import scala.collection.immutable.HashMapprintln("Step 1: How to initialize a HashMap with 3 elements using Tuples of key and value")val hashMap1: HashMap[String, String] = HashMap(("PD","Plain Donut"),("SD","Strawberry Donut"),("CD","Chocolate Donut"))println(s"Elements of hashMap1 = $hashMap1")println("\nStep 2: How to initialize HashMap using key -> value notation")val hashMap2: HashMap[String, String] = HashMap("VD"-> "Vanilla Donut", "GD" -> "Glazed Donut")println(s"Elements of hashMap2 = $hashMap2")

获取HashMap中的值:

  println("\nStep 3: How to access elements in HashMap by specific key")println(s"Element by key VD = ${hashMap2("VD")}")println(s"Element by key GD = ${hashMap2("GD")}")

我们再看一下怎么对集合进行操作,注意因为是immutable HashMap所以所有的操作都会返回一个新的HashMap:

  println("\nStep 4: How to add elements to HashMap using +")val hashMap3: HashMap[String, String] = hashMap1 + ("KD" -> "Krispy Kreme Donut")println(s"Element in hashMap3 = $hashMap3")println("\nStep 5: How to add two HashMaps together using ++")val hashMap4: Map[String, String] = hashMap1 ++ hashMap2println(s"Elements in hashMap4 = $hashMap4")println("\nStep 6: How to remove key and its value from HashMap using -")val hashMap5: Map[String, String] = hashMap4 - ("CD")println(s"HashMap without the key CD and its value = $hashMap5")

更多精彩内容且看:

  • 区块链从入门到放弃系列教程-涵盖密码学,超级账本,以太坊,Libra,比特币等持续更新
  • Spring Boot 2.X系列教程:七天从无到有掌握Spring Boot-持续更新
  • Spring 5.X系列教程:满足你对Spring5的一切想象-持续更新
  • java程序员从小工到专家成神之路(2020版)-持续更新中,附详细文章教程

更多教程请参考 flydean的博客


http://chatgpt.dhexx.cn/article/or9o7WEb.shtml

相关文章

Scala语法教程

第一章 Scala入门 1.1概述 Scala是一门以Java虚拟机(JVM)为运行环境并将面向对象和函数式编程的最佳特性结合在一起的 静态类型编程语言(静态语言需要提前编译的如:Java、c、c等,动态语言如:js&#xff0…

Scala入门教程

教程目录 0x00 教程内容0x01 Scala 理论1. Scala 基本概念2. Scala 交互式命令行 0x03 Scala 基本语法1. 基础语法2. 标识符3. 注释4. 数据类型5. 常量和变量6. 基本函数7. 局部应用8. 柯里化函数9. 可变长度参数10. 类11. 构造函数12. 继承13. 重载方法14. 抽象类15. 特质16. …

Scala基础教程

简介 Scala是一种结合了面向对象和函数式编程的、静态类型的高级编程语言。 Scala代码被编译成.class文件,运行在Java虚拟机(JVM)上,可以调用Java类库。 官方网站:https://www.scala-lang.org/ 官方文档:https://docs.scala-lan…

scala php,Scala 教程

Scala 教程 Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。 Scala 运行在Java虚拟机上,并兼容现有的Java程序。 Scala 源代码被编译成Java字节码,所以它可以运行于JVM之上,…

Scala详细教程

Scala详细教程 目录 Scala详细教程 1.Scala 介绍 1.1 什么是 Scala Scala 1.2 为什么要学 Scala 2.开发环境准备 2.1 ScalaSDK 安装 2.1.1Window 下安装 ScalaSDK 2.1.2Linux 下安装 ScalaSDK 2.2 IDEA 安装 2.3 IDEAScala 插件的离线安装 2.4 IDEA 创建 HelloScala…

Scala教程

1. 基础语法 Scala语言是基于Java虚拟机运行的,所以基本的语法和Java是没有区别的。但是为了简化Java的开发以及融合其他的编程语言的优点和特性,Scala在基本的语法上做了大量的修改和优化,让程序员开发起来更简单,方便&#xff…

Scala教程-详细全部

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/qq_39346903/article/details/113562823 文章目录 第1章 Scala入门1.1 概述1.1.1 为什么学习Scala1.…

单工,半双工和全双工有何区别和联系?

单工、半双工和全双工是电信计算机网络中的三种通信信道。这些通信信道可以提供信息传达的途径。通信信道可以是物理传输介质或通过多路复用介质的逻辑连接。物理传输介质是指能够传播能量波的材料物质,例如数据通信中的导线。并且逻辑连接通常指电路交换连接或分组…

单工、半双工及全双工之间的区别

1、单工数据传输只支持数据在一个方向上传输;在同一时间只有一方能接受或发送信息,不能实现双向通信,举例:电视,广播。 2、半双工数据传输允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实…

全双工、半双工、单工有什么区别!

什么是全双工? 全双工:(Full Duplex)是通讯传输的一个术语。通信允许数据在两个方向上同时传输,它在能力上相当于两个单工通信方式的结合。全双工指可以同时(瞬时)进行信号的双向传输&#xff0…

三种通信方式——单工、半双工和双工通信

数据通常是在两个站(点对点)之间进行传输,按照数据流的方向可分为三种传输模式:单 工、半双工、全双工。 一、单工通信(simplex) 单工通信只支持信号在一个方向上传输(正向或反向&#xff09…

图文并茂~ 详解交换机中的半双工与全双工网络知识

很多学习网络知识的朋友在配置交换机时,时常会看到半双工与全双工的功能,今天带大家一起来了解下什么是半双工与全双工。 早期的网络设备HUB(集线器)就是半双工,目前基本没有人用了,而现在用的SWITCH&…

[网络管理]全双工与半双工的区别

同事说新办公室的网络一直不稳定,经常掉线延迟。检查进口线路和更换转接网线。都无法解决问题。 估计是不是进口网线中一根或者2根短路,那就修改下网卡属性吧。把自适应改成全双工10M模式,测试OK。 全双工传输 英文写法是:Full-Du…

单工通信、半双工通信和全双工通信

数据通信中,数据在线路上的传送方式可以分为 单工通信、 半双工通信和 全双工通信三种。 ewlw半双工通信:半双工通信是指数据可以沿两个方向传送,但同一时刻一个 半双工总线结构 信道只允许单方向传送,因此又被称为双向交替通信。…

比较全面的HTTP和TCP网络传输的单工、全双工和半双工

文章目录 单工、全双工、半双工1. 单工2. 半双工3. 全双工 HTTP协议的工作模式TCP协议的工作模式 本文参考: 图解网络传输单工、半双工、全双工 - 知乎 (zhihu.com) 问:HTTP是单工的还是双工的还是半双工的 - 简书 (jianshu.com) 关于TCP全双工模式的解释…

简析全双工与半双工的区别

全双工传输英文写法是:Full-Duplex Transmissions 是指交换机在发送数据的同时也能够接收数据,两者同步进行,这好像我们平时打电话一样,说话的同时也能够听到对方的声音。目前的交换机都支持全双工。 全双工的好处在于迟延小&…

全双工与半双工的区别

全双工传输英文写法是:Full-Duplex Transmissions 是指交换机在发送数据的同时也能够接收数据,两者同步进行,这好像我们平时打电话一样,说话的同时也能够听到对方的声音。目前的交换机都支持全双工。 全双工的好处在于迟延小&…

全双工、半双工和单工

一,单工、半双工和全双工的区别: 在串行通信中,数据通常是在两个终端(如电脑和外设)之间进行传送,根据数据流的传输方向可分为3种基本传送方式:单工、半双工和全双工。这3种传输方式的示意图和区…

单工,半双工和和全双工通讯的概念

单工:数据传输只支持数据在一个方向上传输; 半双工:允许数据在两个方向上传输,但某一时刻只允许数据在一个方向上传输,实际上是一种切换方向的单工通信,不需要独立的接收端和发送端,两者可合并…

单工、半双工和全双工的区别

--------------------------------------------- -- 时间:2018-11-06 -- 创建人:Ruo_Xiao -- 邮箱:xclsoftware163.com --------------------------------------------- 一、单工 1、数据只在一个方向上传输,不能实现双方通信。…