scala outline
scala 不可变 map 创建 遍历
def main(args: Array[String]): Unit = {
// 创建不可变map集合 底层是HashMap
val map: Map[String, Int] = Map("a" -> 1, "b" -> 2, "c" -> 3)
//遍历方式1
map.foreach((kv: (String, Int)) => {
print(kv + " ") // 输出 (a,1) (b,2) (c,3)
})
//遍历方式2
val it: Iterator[(String, Int)] = map.iterator
while (it.hasNext) {
print(it.next()) // 输出 (a,1) (b,2) (c,3)
}
//遍历方式3
for (k <- map.keys) {
print(k + "--->" + map.get(k)) // 输出 a--->Some(1)b--->Some(2)c--->Some(3)
}
}
思考:
为什么value值会有some包裹?
请参考 scala map取值中的使用map.get(key).get
取值
scala map取值
使用 map(key)
- 如果 key 存在,则返回对应的值
- 如果 key 不存在,则抛出异常[java.util.NoSuchElementException]
import scala.collection.mutable
object demo01_map {
def main(args: Array[String]): Unit = {
val map2 = mutable.Map("name" -> "Alice", "height" -> 175, "city" -> "北京")
println(map2("name")) // Alice
println(map2("name1")) // NoSuchElementException
}
}
使用 contains
方法检查是否存在 key
import scala.collection.mutable
object demo01_map {
def main(args: Array[String]): Unit = {
val map2 = mutable.Map("name" -> "Alice", "height" -> 175, "city" -> "北京")
if (map2.contains("name")) {
println(map2("name"))
} else {
println("不存在name")
}
}
}
使用map.get(key).get
取值
import scala.collection.mutable
object demo01_map {
def main(args: Array[String]): Unit = {
val map2 = mutable.Map("name" -> "Alice", "height" -> 175, "city" -> "北京")
// 1.如果key存在 map.get(key)就会返回 Some(值) ,然后 Some(值).get就可以取出value
// 2.如果key不存在 map.get(key) 就会返回 None
// 3.这样做的原因是为了避免空指针异常
println(map2.get("name").get) // Alice
println(map2.get("sb").get) // 抛出异常
}
}
使用 map.getOrElse()
取值
import scala.collection.mutable
object demo01_map {
def main(args: Array[String]): Unit = {
val map2 = mutable.Map("name" -> "Alice", "height" -> 175, "city" -> "北京")
// 有则返回值,没有返回[]
println(map2.getOrElse("name", "Error")) // Alice
println(map2.getOrElse("sb", "Error")) // Error
}
}
scala 可变 map 创建
def main(args: Array[String]): Unit = {
// 创建可变map集合
val map: mutable.Map[String, Int] = mutable.Map("a" -> 1, "b" -> 2, "c" -> 3)
// 添加元素
map.put("d", 4)
// 遍历
map.foreach(print)
}
建议
建议:
在操作集合的时候,不可集合的增删改查变用符号,可变集合的增删改查变用方法