Scala第十章节(映射相关知识点、了解迭代器的用法)

映射

映射指的就是Map。它是由键值对(key, value)组成的集合。特点是: 键具有唯一性 , 但是值可以重复. 在Scala中,Map也分为不可变Map和可变Map。

注意: 如果添加重复元素(即: 两组元素的键相同), 则 会用新值覆盖旧值 .

5.1 不可变Map

不可变Map指的是元素 , 长度都不可变.

语法
  • 方式一: 通过 箭头 的方式实现.
scala 复制代码
val/var map = Map(键->值, 键->值, 键->值...) // 推荐,可读性更好
  • 方式二: 通过 小括号 的方式实现.
scala 复制代码
val/var map = Map((键, 值), (键, 值), (键, 值), (键, 值)...)
需求
  1. 定义一个映射,包含以下学生姓名和年龄数据: 张三 -> 23, 李四 -> 24, 李四 -> 40
  2. 打印结果.
参考代码
scala 复制代码
//案例: 演示不可变Map
object ClassDemo19 {
def main(args: Array[String]): Unit = {
//1. 定义一个映射,包含以下学生姓名和年龄数据.
val map1 = Map("张三" -> 23, "李四" -> 24, "李四" -> 40)
val map2 = Map(("张三", 23),("李四", 24), ("李四" -> 40))
//2. 打印结果.
println(s"map1: ${map1}")
println(s"map2: ${map2}")
}
}

5.2 可变Map

特点

可变Map指的是元素,长度都可变. 定义语法与不可变Map一致, 只不过需要先手动导包:

import scala.collection.mutable.Map

需求
  1. 定义一个映射,包含以下学生姓名和年龄数据: 张三 -> 23, 李四 -> 24
  2. 修改张三的年龄为30
  3. 打印结果
参考代码
scala 复制代码
import scala.collection.mutable.Map
//案例: 演示可变Map.
object ClassDemo20 {
def main(args: Array[String]): Unit = {
//1. 定义一个映射,包含以下学生姓名和年龄数据.
val map1 = Map("张三" -> 23, "李四" -> 24)
val map2 = Map(("张三", 23),("李四", 24))
//2. 修改张三的年龄为30
map1("张三") = 30
//3. 打印结果
println(s"map1: ${map1}")
println(s"map2: ${map2}")
}
}

5.3 Map基本操作

格式
  1. map(key) : 根据键获取其对应的值, 键不存在返回None.

  2. map.keys : 获取所有的键.

  3. map.values : 获取所有的值.

  4. 遍历map集合: 可以通过普通for实现.

  5. getOrElse: 根据键获取其对应的值, 如果键不存在, 则返回指定的默认值.

  6. +号 : 增加键值对, 并生成一个新的Map.

注意: 如果是可变Map, 则可以通过 +=或者++= 直接往该可变Map中添加键值对元素.

  1. -号 : 根据键删除其对应的键值对元素, 并生成一个新的Map.

注意: 如果是可变Map, 则可以通过 -=或者--= 直接从该可变Map中删除键值对元素.

示例
  1. 定义一个映射,包含以下学生姓名和年龄数据: 张三 -> 23, 李四 -> 24
  2. 获取张三的年龄, 并打印.
  3. 获取所有的学生姓名, 并打印.
  4. 获取所有的学生年龄, 并打印.
  5. 打印所有的学生姓名和年龄.
  6. 获取 王五 的年龄,如果 王五 不存在,则返回-1, 并打印.
  7. 新增一个学生:王五, 25, 并打印结果.
  8. 将 李四 从可变映射中移除, 并打印.
参考代码
scala 复制代码
import scala.collection.mutable.Map
//案例: 演示Map的常见操作.
object ClassDemo21 {
def main(args: Array[String]): Unit = {
//1. 定义一个映射,包含以下学生姓名和年龄数据: 张三 -> 23, 李四 -> 24
val map1 = Map("张三" -> 23, "李四" -> 24)
//2. 获取张三的年龄, 并打印.
println(map1.get("张三"))
//3. 获取所有的学生姓名, 并打印.
println(map1.keys)
//4. 获取所有的学生年龄, 并打印.
println(map1.values)
//5. 打印所有的学生姓名和年龄.
for((k, v) <- map1) println(s"键:${k}, 值:${v}")
println("-" * 15)
//6. 获取`王五`的年龄,如果`王五`不存在,则返回-1, 并打印.
println(map1.getOrElse("王五", -1))
println("-" * 15)
//7. 新增一个学生:王五, 25, 并打印结果.
/*//不可变Map
val map2 = map1 + ("王五" -> 25)
println(s"map1: ${map1}")
println(s"map2: ${map2}")*/
map1 += ("王五" -> 25)
//8. 将`李四`从可变映射中移除, 并打印.
map1 -= "李四"
println(s"map1: ${map1}")
}
}

迭代器(iterator)

6.1 概述

Scala针对每一类集合都提供了一个迭代器(iterator), 用来迭代访问集合.

6.2 注意事项

  1. 使用 iterator 方法可以从集合获取一个迭代器.

    迭代器中有两个方法:

    ​ hasNext方法: 查询容器中是否有下一个元素

    ​ next方法: 返回迭代器的下一个元素,如果没有,抛出NoSuchElementException

  2. 每一个迭代器都是有状态的.

    ​ 即: 迭代完后保留在最后一个元素的位置. 再次使用则抛出NoSuchElementException

  3. 可以使用while或者for来逐个获取元素.

6.3 示例

需求
  1. 定义一个列表,包含以下元素:1,2,3,4,5
  2. 使用while循环和迭代器,遍历打印该列表
参考代码
scala 复制代码
//案例: 演示迭代器
object ClassDemo22 {
def main(args: Array[String]): Unit = {
//1. 定义一个列表,包含以下元素:1,2,3,4,5
val list1 = List(1, 2, 3, 4, 5)
//2. 使用while循环和迭代器,遍历打印该列表.
//2.1 根据列表获取其对应的迭代器对象.
val it = list1.iterator
//2.2 判断迭代器中是否有下一个元素.
while(it.hasNext){
//2.3 如果有, 则获取下一个元素, 并打印.
println(it.next)
}
//分割线.
println("-" * 15)
//迭代完后, 再次使用该迭代器获取元素, 则抛异常: NoSuchElementException
println(it.next)
}
}
相关推荐
星火开发设计5 小时前
C++ 数组:一维数组的定义、遍历与常见操作
java·开发语言·数据结构·c++·学习·数组·知识
TTGGGFF5 小时前
控制系统建模仿真(一):掌握控制系统设计的 MAD 流程与 MATLAB 基础运算
开发语言·matlab
2501_944424125 小时前
Flutter for OpenHarmony游戏集合App实战之贪吃蛇食物生成
android·开发语言·flutter·游戏·harmonyos
秦拿希6 小时前
【paimon-trino】trino整合paimon元数据访问s3
大数据·trino·paimon
Lhuu(重开版6 小时前
JS:正则表达式和作用域
开发语言·javascript·正则表达式
仙俊红7 小时前
Java Map 家族核心解析
java·开发语言
kuankeTech7 小时前
解决内外贸双轨制难题,外贸ERP智能引擎同步管理国内外合规与标准
大数据·人工智能·数据可视化·软件开发·erp
浅念-7 小时前
C语言小知识——指针(3)
c语言·开发语言·c++·经验分享·笔记·学习·算法
q_35488851538 小时前
AI大模型:python新能源汽车推荐系统 协同过滤推荐算法 Echarts可视化 Django框架 大数据毕业设计(源码+文档)✅
大数据·人工智能·python·机器学习·信息可视化·汽车·推荐算法