zoukankan      html  css  js  c++  java
  • scala 数据结构(六):映射 Map

    1 映射 Map-基本介绍

    Scala中的Map介绍

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

    2) Scala中,有可变Map (scala.collection.mutable.Map) 和 不可变Map(scala.collection.immutable.Map)

    2 映射 Map-构建Map

    方式1-构造不可变映射

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

     方式2-构造可变映射

    方式3-创建空的映射

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

    println(map3)

    方式4-对偶元组

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

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

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

    3 映射 Map-取值

    方式1-使用map(key) 

    val value1 = map2("Alice")

    println(value1)

    说明:

    如果key存在,则返回对应的值

    如果key不存在,则抛出异常[java.util.NoSuchElementException]

    在Java中,如果key不存在则返回null

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

    // 返回Boolean

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

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

    map4.contains("B")

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

    val map4 = mutable.Map( ("A", 1), ("B", 2), ("C", 3),("D", 30.9) )
    if( map4.contains("B") ) {
    println("key存在 值= " + map4("B"))
    } else {
    println("key不存在")
    }

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

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

    var map4 = mutable.Map( ("A", 1), ("B", "北京"), ("C", 3) )
    println(map4.get("A")) //Some
    println(map4.get("A").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

    方式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","默认"))

    如何选择取值方式建议

    1) 如果我们确定map有这个key ,则应当使用map(key), 速度快

    2) 如果我们不能确定map是否有key ,而且有不同的业务逻辑,使用map.contains() 先判断在加入逻辑

    3) 如果只是简单的希望得到一个值,使用map4.getOrElse("ip","127.0.0.1")

    4  映射 Map-对map修改、添加和删除

    更新map的元素

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

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

    添加map元素

    方式1-增加单个元素

    val map4 = mutable.Map( ("A", 1), ("B", "北京"), ("C", 3) )
    map4 += ( "D" -> 4 )
    map4 += ( "B" -> 50 )
    println(map4)

    方式2-增加多个元素

    val map4 = mutable.Map( ("A", 1), ("B", "北京"), ("C", 3) )
    val map5 = map4 + ("E"->1, "F"->3)
    map4 += ("EE"->1, "FF"->3)  

    删除map元素

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

    说明

    "A","B" 就是要删除的key, 可以写多个.

    如果key存在,就删除,如果key不存在,也不会报错.

    5  映射 Map-对map遍历

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

    val map1 = mutable.Map( ("A", 1), ("B", "北京"), ("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) //v是Tuple?

    说明 1.每遍历一次,返回的元素是Tuple2 2.取出的时候,可以按照元组的方式来取

  • 相关阅读:
    Android BroadcastAnyWhere(Google Bug 17356824)漏洞具体分析
    读写Word的组件DocX介绍与入门
    2015年终总结,忙碌与有所收获的一年,2016年继续努力!
    数据库题——高于部门平均工资查询问题
    Oracle 简单的列转行
    行香子&#183;过尽千山
    ZOJ2599:Graduated Lexicographical Ordering(很经典的数位DP)
    【oracle11g,18】存储结构:暂时表,手工条带化,表/索引迁移表空间,删除表,外部表
    联想S820 MIUI刷机包 MIUI 4.4.30 流畅执行 在线主题破解
    android开发艺术探索学习 之 结合Activity的生命周期了解Activity的LaunchMode
  • 原文地址:https://www.cnblogs.com/qiu-hua/p/13264325.html
Copyright © 2011-2022 走看看