前言
scala中Map是一种可迭代的键值对(key/value)结构
。所有的值都可以通过键来获取。Map 中的键都是唯一的
1. 不可变Map
object T14 {
def main(args: Array[String]): Unit = {
//scala中map key不能重复 无序
//scala中键值对,可直接采用K->V方式
//key相同时,会进行覆盖
val map = Map("a" -> 1, "b" -> 2, "c" -> 3, "a" -> 5)
println(map)
// 添加数据
val map1 = map + ("d" -> 7)
println(map1)
// 删除数据
val map2 = map - "a"
println(map2)
// 修改数据
val map3 = map.updated("c", 9)
println(map3)
//合并map
val map4 = map ++ Map(1 -> "f", 3 -> "h")
println(map4)
// 遍历数据
map.foreach(println)
}
}
2. 可变Map
需引入import scala.collection.mutable
import scala.collection.mutable
object T15 {
def main(args: Array[String]): Unit = {
val map = mutable.Map("a" -> 1, "b" -> 2, "c" -> 3)
println(map)
//key不存在,则插入;存在,则更新
map.put("a", 3)
println(map)
//可变Map +增加数据,产生新的map
val map1 = map + ("e" -> 5)
println(map1 eq map)
//可变Map +=增加数据,返回原来的map自身
val map2 = map += ("e" -> 5)
println(map2 eq map)
//修改数据的2种方式
map.update("c", 200)
println(map)
map("c") = 300
println(map)
//删除数据
map.remove("c")
// map - ("c")
// map -= ("c")
println(map)
//清空数据
map.clear()
println(map)
}
}
import scala.collection.mutable
object T16 {
def main(args: Array[String]): Unit = {
// java 若key存在,则取得value,若不存在,则返回null,hashmap可存储空键空值
//scala 可存储空值,不可以存储空键
val map = mutable.Map("a" -> 1, "b" -> 2, "c" -> 3, "d" -> null)
//map根据key查询数据,会将查询结果进行包装
//返回结果的类型为Option[V]类型,有2个对象,Some(有值)、None(无值),以避免空指针异常
//对于key存在的场合,那么返回结果为Some
val value1 = map.get("a")
println(value1)
val value2 = map.get("d")
println(value2)
//对于key不存在的场合,那么返回结果为None
val value3 = map.get("e")
println(value3)
//获取key对应的具体值
println(map.get("a").get)
println(map.get("d").get)
//从None对象中get值,会发生异常
// println( map.get("e").get)
// 先判断是否为空或为空时设置默认值
println(map.get("e").isEmpty)
println(map.get("e").getOrElse(-1))
//更简介的方式
map.getOrElse("e",-1)
}
}
import scala.collection.mutable
object T17 {
def main(args: Array[String]): Unit = {
val map = mutable.Map("a" -> 1, "b" -> 2, "c" -> 3, "d" -> null)
//mao 键 迭代器
// val keys = map.keys
// val iterator1 = keys.iterator
val iterator1 = map.keysIterator
while (iterator1.hasNext) {
println(map.get(iterator1.next()).get)
}
//mao 值 迭代器
// val values = map.values
// val iterator2 = values.iterator
val iterator2 = map.valuesIterator
while (iterator2.hasNext) {
println(iterator2.next())
}
}
}
3. Map转换为其他数据类型
object T18 {
def main(args: Array[String]): Unit = {
val map1 = mutable.Map("a" -> 1, "b" -> 2, "c" -> 3)
val set: Set[(String, Int)] = map1.toSet
val list: List[(String, Int)] = map1.toList
val array: Array[(String, Int)] = map1.toArray
println(set.mkString(","))
println(list.mkString(","))
println(array.mkString(","))
}
}