0
点赞
收藏
分享

微信扫一扫

LeetCode 面试经典150题 45.跳跃游戏II

墨春 03-22 19:30 阅读 2

映射

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

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

5.1 不可变Map

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

语法
  • 方式一: 通过 箭头 的方式实现.
val/var map = Map(->,->,->...) // 推荐,可读性更好
  • 方式二: 通过 小括号 的方式实现.
val/var map = Map((,), (,), (,), (,)...)
需求
  1. 定义一个映射,包含以下学生姓名和年龄数据: 张三 -> 23, 李四 -> 24, 李四 -> 40
  2. 打印结果.
参考代码
//案例: 演示不可变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. 打印结果
参考代码
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. 将 李四 从可变映射中移除, 并打印.
参考代码
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循环和迭代器,遍历打印该列表
参考代码
//案例: 演示迭代器
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)
}
}
举报

相关推荐

0 条评论