Scala Map 映射

Java中的 Map

  • HashMap 是一个散列表 (数组 + 链表) ,它存储的内容是键值对 (key-value) 映射,Java中的HashMap是无序的。
import java.util.HashMap;

public class TestJavaMap {
    public static void main(String[] args) {
        HashMap<String,Integer> hashMap = new HashMap<>();
        hashMap.put("no1",100);
        hashMap.put("no2",200);
        hashMap.put("no3",300);
        hashMap.put("no4",400);

        System.out.println(hashMap);
        System.out.println(hashMap.get("no2"));
    }
}

 

Scala中的 Map

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

映射 Map 创建

  1. 默认是immutable.Map
  2. key-value 支持Any
  3. 在Map的底层,每对key-valye 是 Tuple2 (元组2)
  4. 从输出的结果看到,输出顺序和声明顺序一致
import scala.collection.mutable

object TestScalaMap {
  def main(args: Array[String]): Unit = {
    // 不可变Map 映射
    val map1 = Map("A" -> 10, "B" -> 20, "C" -> 80)
    println(map1)

    // 可变Map 映射
    val map2 = mutable.Map("A" -> 10, "B" -> 20, "C" -> 80)
    println(map2)

    // 空Map 映射
    val map3 = new mutable.HashMap[String, Int]
    println(map3)

    // 通过元组创建Map
    val map4 = mutable.Map(("A" -> 10), ("B" -> 20), ("C" -> 80))
    println(map4)
  }
}

映射 Map 取值

  1. 如果key存在,则返回对应的值
  2. 如果key不存在,则抛出异常
  3. 在Java,如果key不存在则返回null
// 方式1 使用map(key)
// 有返回
// 没有抛出异常 NoSuchElementException: key not found: A~
println(map4("A"))
println(map4("A~"))

// 方式2 判断
if (map4.contains("A~")) {
  println("key 存在,值= " +map4("A~"))
} else {
  println("key不存在 :)")
}

// 方式3 map.get(key).get
// 如果存在 返回Some()  Some().get 返回值
// 如果不存在返回None 抛出异常 NoSuchElementException: None.get
println(map4.get("A~").get)

// 方式4 使用map.getOrElse()
// 如果有返回
// 如果没有返回默认值
println(map4.getOrElse("A","默认值"))

如何选择取值方式建议

  1. 如果定义map有这个key,则应当使用map(key),速度快
  2. 如果不能确定map是否有key,而且有不同的业务逻辑,使用map.contains() 先判断在加入逻辑
  3. 如果只是简单的希望得到一个值,使用map.getOrElse("ip","默认值")

映射 Map 增删改查

val map5 = mutable.Map(("A", "北京"), ("B", "广州"), ("C", "上海"), ("D", "深圳"))
map5("E") = "南京"
map5("E") = "武汉"
println(map5)

map5 += ("F" -> "南京")
map5 += ("G" -> "沈阳")
println(map5)

map5 += ("EE" -> "天津", "FF" -> "西安")
println(map5)

map5 -= ("F","G","X")
println(map5)

映射 Map 遍历

val map6 = mutable.Map(("A", 1), ("B", "北京"), ("C", 3))
for ((k, v) <- map6) print(k + ":" + v + "\t")
println()
for (v <- map6.keys) print(v + "\t")
println()
for (v <- map6.values) print(v + "\t")
println()
for (v <- map6) print(v + "\t") //v是Tuple2
println()

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值