scala中的映射Map

1.定长的Map

scala> val a = Map("name"->"ruoze","age"->30)
a: scala.collection.immutable.Map[String,Any] = Map(name -> ruoze, age -> 30)
查询
scala> a("name")
res0: Any = ruoze
scala> a("age")
res1: Any = 30

因为是定长Map,没有"J ge"这个值
scala> a("J ge")
java.util.NoSuchElementException: key not found: J ge
  at scala.collection.MapLike$class.default(MapLike.scala:228)
  at scala.collection.AbstractMap.default(Map.scala:59)
  at scala.collection.MapLike$class.apply(MapLike.scala:141)
  at scala.collection.AbstractMap.apply(Map.scala:59)
  ... 32 elided

因为是不可变的Map,所以也改不掉,也加不了
scala> a("name")="J ge"
<console>:13: error: value update is not a member of scala.collection.immutable.Map[String,Any]
       a("name")="J ge"
       ^
scala> a("gender")="male"
<console>:13: error: value update is not a member of scala.collection.immutable.Map[String,Any]
       a("gender")="male"
       ^

2.可变的Map

scala> import scala.collection.mutable.Map
import scala.collection.mutable.Map

scala> val b =  Map("name"->"ruoze","age"->30)
b: scala.collection.mutable.Map[String,Any] = Map(age -> 30, name -> ruoze)
取值
scala> b("name")
res6: Any = ruoze
改值
scala> b("name")="J"

scala> b
res8: scala.collection.mutable.Map[String,Any] = Map(age -> 30, name -> J)
改值
scala> b("age")="20"

scala> b
res10: scala.collection.mutable.Map[String,Any] = Map(age -> 20, name -> J)

3.HashMap

scala> val c=scala.collection.mutable.HashMap("name"->"ruoze","age"->30)
c: scala.collection.mutable.HashMap[String,Any] = Map(age -> 30, name -> ruoze)
取值
scala> c("name")
res11: Any = ruoze

scala> c("age")
res12: Any = 30

改值
scala> c("age")="40"

scala> c
res14: scala.collection.mutable.HashMap[String,Any] = Map(age -> 40, name -> ruoze)

4.用法

本来取一个c本身没有的key会报错,用getOrElse方法就不会报错
scala> c("gender")
java.util.NoSuchElementException: key not found: gender
  at scala.collection.MapLike$class.default(MapLike.scala:228)
  at scala.collection.AbstractMap.default(Map.scala:59)
  at scala.collection.mutable.HashMap.apply(HashMap.scala:65)
  ... 32 elided

getOrElse的用法,去c里面找key,没有放一个unknoen,不报错
scala> c.getOrElse("gender","unknown")
res15: Any = unknown

加法
scala> c +=("gender"->"male")
res17: c.type = Map(age -> 40, name -> ruoze, gender -> male)

scala> c
res18: scala.collection.mutable.HashMap[String,Any] = Map(age -> 40, name -> ruoze, gender -> male)

减法,只要key就行
scala> c -=("name")
res19: c.type = Map(age -> 40, gender -> male)

scala> c
res20: scala.collection.mutable.HashMap[String,Any] = Map(age -> 40, gender -> male)

5.Map中的遍历

package com.ruozedata.bigdata
import scala.collection.mutable.Map
import scala.collection.mutable.HashMap
object MapApp {
  def main(args: Array[String]): Unit = {
 
    val b = scala.collection.mutable.HashMap("name" -> "ruoze", "age" -> "30")

    1.   for ((key,value)<-b ){
    println(key + " : " + value)
    }
    2.  for ((key,_)<-b){
    println(key + " : "  + b.getOrElse(key,0))
     }
    3.  for ( s<- b.keySet){
    println(s  + " : " + b.getOrElse(s , 0))
    }
    4.  for (ele <- b.values) {
      println(ele)
    }
  }
}

第四种方法打印出来只有value,没有key
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值