Scala—— 18.映射Map

左心房为你撑大大i 提交于 2020-02-19 02:22:17

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!