Scala中的Map和Java类似,也是一个散列表,它存储的内容也是键值对(key-value)映射,Scala中不可变的Map是有序的,可变的Map是无序的。
Scala中,有可变Map(scala.collection.mutable.Map)和不可变Map(scala.collection.immutable.Map)。
Scala中的不可变Map是有序的。
1.构造不可变映射
默认Map是 immutable.Map,key-value 类型支持Any,在Map的底层,每对key-value是Tuple2,输出的结果中,输出顺序和声明顺序一致。
scala> val map1 = Map("Alice" -> 19, "Tom" -> 20, "Jack" -> 21)
map1: scala.collection.immutable.Map[String,Int] = Map(Alice -> 19, Tom -> 20, Jack -> 21)
scala> print(map1)
Map(Alice -> 19, Tom -> 20, Jack -> 21)
2.构造可变映射
scala> val map2 = scala.collection.mutable.Map("Alice" -> 19, "Tom" -> 20, "Jack" -> 21)
map2: scala.collection.mutable.Map[String,Int] = HashMap(Tom -> 20, Jack -> 21, Alice -> 19)
scala> print(map2)
HashMap(Tom -> 20, Jack -> 21, Alice -> 19)
3.创建空的映射
new出来的
scala> val map3 = new scala.collection.mutable.HashMap[String, Int]
map3: scala.collection.mutable.HashMap[String,Int] = HashMap()
scala> println(map3)
HashMap()
4.创建对偶元组
对偶元组就是只含有两个数据的元组,即创建包含键值对的二元组。
val map4 = scala.collection.mutable.Map(("Alice" , 19), ("Tom" , 20), ("Jack" , 21))
println("map4=" + map4)
5.map(key)
scala> val map4 = scala.collection.mutable.Map((“Alice” , 19), (“Tom” , 20), (“Jack” , 21))
map4: scala.collection.mutable.Map[String,Int] = HashMap(Tom -> 20, Jack -> 21, Alice -> 19)
scala> map4(“Tom”)
res20: Int = 20
scala> map4(“KK”)
java.util.NoSuchElementException: key not found: KK
at scala.collection.MapOps.default(Map.scala:246)
at scala.collection.MapOps.default$(Map.scala:245)
at scala.collection.AbstractMap.default(Map.scala:376)
at scala.collection.mutable.HashMap.apply(HashMap.scala:405)
… 28 elided
6.contains方法检查是否存在key
scala> map4.contains
def contains(key: String): Boolean
scala> map4.contains("Tom")
res26: Boolean = true
7.map.get(key).get取值
scala> map4.get
def get(key: String): Option[Int]
scala> map4.get("Tom").get
res31: Int = 20
8.map.getOrElse()
如果key存在,返回key对应的值。如果key不存在,返回默认值。在Java中底层有很多类似的操作。
scala> map4.getOrElse
def getOrElse[V1 >: Int](key: String, default: => V1): V1
scala> map4.getOrElse("Tom","error")
res45: Any = 20
scala> map4.getOrElse("Tom1","error")
res46: Any = error
9.更新map的元素
scala> map4("Tom")=12
scala> map4("Tom")
res49: Int = 12
scala> var map5=Map("blueicex"->33,"gege"->44,"liuzexuan"->9)
map5: scala.collection.immutable.Map[String,Int] = Map(blueicex -> 33, gege -> 44, liuzexuan -> 9)
scala> map5("gege")=33
^
error: value update is not a member of scala.collection.immutable.Map[String,Int]
did you mean updated?
10. 添加&删除 map元素
scala> import scala.collection.mutable
import scala.collection.mutable
scala> var map6=mutable.Map(“blueicex”->33,“gege”->44,“liuzexuan”->9)
map6: scala.collection.mutable.Map[String,Int] = HashMap(blueicex -> 33, gege -> 44, liuzexuan -> 9)
scala> map6+=(“girl1”->21)
res53: scala.collection.mutable.Map[String,Int] = HashMap(girl1 -> 21, blueicex -> 33, gege -> 44, liuzexuan -> 9)
scala> map6+=(“girl2”->21,“girl3”->20)
^
warning: method += in trait Growable is deprecated (since 2.13.0): Use ++=
(addAll) instead of varargs +=
res54: scala.collection.mutable.Map[String,Int] = HashMap(liuzexuan -> 9, girl1 -> 21, girl2 -> 21, girl3 -> 20, blueicex -> 33, gege -> 44)
scala> map6++= Map((“girl5”,23),(“girl6”,24))
res75: scala.collection.mutable.Map[String,Int] = HashMap(girl5 -> 23, girl6 -> 24, liuzexuan -> 9, girl1 -> 21, girl2 -> 21, girl3 -> 20, blueicex -> 33, gege -> 44)
11.遍历map
scala> var map6=scala.collection.mutable.Map("girl5" -> 23, "girl6" -> 24, "liuzexuan" -> 9 )
map6: scala.collection.mutable.Map[String,Int] = HashMap(girl5 -> 23, girl6 -> 24, liuzexuan -> 9)
scala> var map6=scala.collection.mutable.HashMap( "girl5" -> 23, "girl6" -> 24, "liuzexuan" -> 9 )
map6: scala.collection.mutable.HashMap[String,Int] = HashMap(girl5 -> 23, girl6 -> 24, liuzexuan -> 9)
scala> for((k,v)<-map6)
| println(k+"->"+v)
girl5->23
girl6->24
liuzexuan->9
scala> for(value<-map6)
| println(value)
(girl5,23)
(girl6,24)
(liuzexuan,9)
scala> for(k<-map6.keySet)
| println(k)
girl5
girl6
liuzexuan
scala> for(value<-map6.values)
| println(value)
23
24
9
————Blueicex 2020/2/16 19:00 blueice1980@126.com
来源:CSDN
作者:blueicex2020
链接:https://blog.csdn.net/blueicex2017/article/details/104346938