映射

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

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

5.1 不可变Map

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

语法

方式一: 通过 箭头 的方式实现.

val/var map = Map(键->值, 键->值, 键->值...) // 推荐,可读性更好

方式二: 通过 小括号 的方式实现.

val/var map = Map((键, 值), (键, 值), (键, 值), (键, 值)...)

需求

定义一个映射,包含以下学生姓名和年龄数据: 张三 -> 23, 李四 -> 24, 李四 -> 40打印结果.

参考代码

//案例: 演示不可变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

需求

定义一个映射,包含以下学生姓名和年龄数据: 张三 -> 23, 李四 -> 24修改张三的年龄为30打印结果

参考代码

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基本操作

格式

map(key) : 根据键获取其对应的值, 键不存在返回None. map.keys : 获取所有的键. map.values : 获取所有的值. 遍历map集合: 可以通过普通for实现. getOrElse: 根据键获取其对应的值, 如果键不存在, 则返回指定的默认值. +号 : 增加键值对, 并生成一个新的Map.

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

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

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

示例

定义一个映射,包含以下学生姓名和年龄数据: 张三 -> 23, 李四 -> 24获取张三的年龄, 并打印.获取所有的学生姓名, 并打印.获取所有的学生年龄, 并打印.打印所有的学生姓名和年龄.获取 王五 的年龄,如果 王五 不存在,则返回-1, 并打印.新增一个学生:王五, 25, 并打印结果.将 李四 从可变映射中移除, 并打印.

参考代码

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 注意事项

使用 iterator 方法可以从集合获取一个迭代器. 迭代器中有两个方法: ​ hasNext方法: 查询容器中是否有下一个元素 ​ next方法: 返回迭代器的下一个元素,如果没有,抛出NoSuchElementException 每一个迭代器都是有状态的. ​ 即: 迭代完后保留在最后一个元素的位置. 再次使用则抛出NoSuchElementException 可以使用while或者for来逐个获取元素.

6.3 示例

需求

定义一个列表,包含以下元素:1,2,3,4,5使用while循环和迭代器,遍历打印该列表

参考代码

//案例: 演示迭代器

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)

}

}

精彩文章

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。