scala之map

7.1 映射 Map-基本介绍

  1. Scala中的Map 和Java类似,也是一个散列表,它存储的内容也是键值对(key-value)映射,Scala中不可变的Map是有序的,可变的Map是无序的。
  2. Scala中,有可变Map (scala.collection.mutable.Map) 和

不可变Map(scala.collection.immutable.Map)

7.2 构建Map

     7.2.1 方式1-构造不可变映射

       Scala中的不可变Map是有序,构建Map中的元素底层是Tuple2类型。

val map1 = Map("Alice" -> 10, "Bob" -> 20, "Kotlin" -> "北京")

       小结:

       1.从输出的结果看到,输出顺序和声明顺序一致

2.构建Map集合中,集合中的元素其实是Tuple2类型

3.默认情况下(即没有引入其它包的情况下),Map是不可变map

7.2.2方式2-构造可变映射

//需要指定可变Map的包

val map2 = scala.collection.mutable.Map("Alice" -> 10, "Bob" -> 20, "Kotlin" -> 30)

 

说明

  1. 从输出的结果看到,输出顺序和声明顺序不一致

 

7.2.3 方式3-创建空的映射

val map3 = new scala.collection.mutable.HashMap[String, Int]

println(map3)

 

7.2.4 方式4-对偶元组

即创建包含键值对的二元组, 和第一种方式等价,只是形式上不同而已。

对偶元组 就是只含有两个数据的元组。

val map4 = mutable.Map( ("A", 1), ("B", 2), ("C", 3),("D", 30) )

println("map4=" + map4)

println(map4("A"))

 

7.3 Map取值

7.3.1 方式1-使用map(key)

      

val value1 = map2("Alice")

println(value1)

       说明:

1) 如果键存在, 返回对应的值对象

2) 如果键不存在, 抛出异常

3) 在java中 如果不存在返回null

 

7.3.2 方式2-使用contains方法检查是否存在key

// 返回Boolean

// 1.如果key存在,则返回true

// 2.如果key不存在,则返回false

val map4 = mutable.Map( ("A", 1), ("B", 2), ("C", 3),("D", 30.9) )

if( map4.contains("B") ) {

    println("key存在 值= " + map4("B"))

} else {

    println("key不存在")

}

说明:使用containts先判断在取值,可以防止异常,并加入相应的处理逻辑。

 

7.3.3 方式3-使用map.get(key).get取值

通过映射.get(键) 这样的调用返回一个Option对象,要么是Some,要么是None

var map4 = mutable.Map( ("A", 1), ("B", "北京"), ("C", 3) )

println(map4.get(“X")) //None

println(map4.get(“X").get) //得到Some再取出

说明:

  1. map.get方法会将数据进行包装
  2. 如果 map.get(key) key存在返回some,如果key不存在,则返回None
  3.  如果 map.get(key).get  key存在,返回key对应的值,否则,抛出异常 java.util.NoSuchElementException: None.get

 

7.3.4 方式4-使用map4.getOrElse()取值

getOrElse 方法 : def getOrElse[V1 >: V](key: K, default: => V1)

说明:

  1. 如果key存在,返回key对应的值;
  2. 如果key不存在,返回默认值。在java中底层有很多类似的操作。

val map4 = mutable.Map( ("A", 1), ("B", "北京"), ("C", 3) )

println(map4.getOrElse("A","默认"))

7.3.5 如何选择取值方式建议

  1. 如果我们确定key是存在的,应该使用map("key") ,速度快.
  2. 如果我们不确定key是否存在, 而且在不存在时,有业务逻辑处理就是用map.contains() 配合 map("key")
  3. 如果只是简单的希望返回一个值,就使用getOrElse()

 

7.4 对map修改、添加和删除

     7.4.1 更新map的元素

val map4 = mutable.Map( ("A", 1), ("B", "北京"), ("C", 3) )

map4(“A”) = 20 //修改或增加

println(map4)

       说明:

  1. map 是可变的,才能修改,否则报错;
  2. 如果key存在:则修改对应的值,key不存在,等价于添加一个key-val

7.4.2 添加map元素

方式1-增加单个元素

val map4 = mutable.Map( ("A", 1), ("B", "北京"), ("C", 3) )

map4 += ( "D" -> 4 )

map4 += ( "B" -> 50 )

println(map4)

思考:如果增加的key 已经存在会怎么样?

方式2-增加多个元素

val map4 = mutable.Map( ("A", 1), ("B", "北京"), ("C", 3) )

val map5 = map4 + ("E"->1, "F"->3)

map4 += ("EE"->1, "FF"->3) 

 

7.4.3 删除map元素

val map4 = mutable.Map( ("A", 1), ("B", "北京"), ("C", 3) )

map4 -= ("A", "B")

println("map4=" + map4)

说明:

  1. "A","B" 就是要删除的key, 可以写多个.
  2. 如果key存在,就删除,如果key不存在,也不会报错.

7.5 对map遍历

       对map的元素(元组Tuple2对象 )进行遍历的方式很多,具体如下:

val map1 = mutable.Map( ("A", 1), ("B", "2"), ("C", 3) )

for ((k, v) <- map1) println(k + " is mapped to " + v)

for (v <- map1.keys) println(v)

for (v <- map1.values) println(v)

for(v <- map1) println(v)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值