Kotlin Map接口

Kotlin Map接口,在一个公司中,每个员工都有唯一的工号,通过工号可以查询到这个员工的信息,这两者是一对一的关系。在应用程序中,如果想储存这种具有对应关系的数据,则需要使用Kotlin中提供的Map接口。Map接口是一种双列集合,它的每个元素都包含一个键对象Key和一个值对象Value,键和值对象之间存在一种对应关系,称为映射。从Map集合中访问元素时,只要指定了Key,就能找到对应的Value。

Map集合中的元素是无序可重复的,Map集合与List、Set集合类似,同样分为不可变集合Map和可变集合MutableMap两种,其中可变集合MutableMap可以对集合中的元素进行增加和删除的操作,不可变集合Map对集合中的元素仅提供只读操作。

不可变Map

val map = mapOf(1 to "酷客网", 2 to "酷客教程", 3 to "酷客翻译")

上述代码中创建了一个不可变的Map集合,其中“1、2、3”为Key值,“酷客网、酷客教程、酷客翻译”为Value值,“to”为Key/Value映射关系的指向,该集合中的操作主要有查询操作,接下来我们针对这个操作进行详细讲解。

1. 查询操作
不可变Map集合的查询操作主要有判断集合是否为空、获取集合中元素的数量、判断集合中是否包含指定的键、判断集合中是否包含指定的值以及根据key(键)获取value(值),如表所示。
Kotlin Map接口

接下来我们通过一个案例来演示上述表中不可变Map集合的查询操作,具体代码如下所示。

package com.itheima.chapter05
fun main(args: Array<String>) {
    val map = mapOf(1 to " 酷客网", 2 to "酷客教程", 3 to "酷客翻译")
    if (map.isEmpty()) {
        println("map 集合中没有元素")
        return
    } else {
        println("map 集合中有元素,元素个数为:" + map.size)
    }
   if (map.containsKey(2)) {
       println("map 集合中的Key 包含2")
   } else {
       println("map 集合中的Key 不包含2")
   }
   if (map.containsValue("3")) {
       println("map 集合中的Value包含元素3")
   } else {
       println("map 集合中的Value不包含元素3")
   }
   println("map 集合中key 为1 对应的Value是:" + map.get(1))
}

运行结果:

map集合中有元素,元素个数为:3
map集合中的Key包含2
map集合中的Value不包含元素3
map集合中key为1对应的Value是:酷客网

2. 遍历操作
Map集合也经常需要进行遍历操作,不过由于该集合中存储的是键值映射关系,所以在遍历时,与List、Set集合有些区别。接下来我们通过一个案例进行学习,具体代码如下所示。

package com.itheima.chapter05
fun main(args: Array<String>) {
    val map = mapOf(1 to " 酷客网", 2 to "酷客教程", 3 to "酷客翻译")
    val mapKey = map.keys
    var mapValue = map.values
    println(" 集合中所有的Key :" + mapKey)
    println(" 集合中所有的Value:" + mapValue)
    var mapEntry = map.entries
    mapEntry.forEach {
       println("key: ${it.key} , value: ${it.value}")
   }
}

运行结果:

集合中所有的Key:[1, 2, 3]
集合中所有的Value:[酷客网,酷客教程,酷客翻译]
key:1, value:酷客网
key:2, value:酷客教程
key:3, value:酷客翻译

可变MutableMap

可变MutableMap集合是使用mutableMapOf ()函数来创建的,具体代码如下:

val mMap = mutableMapOf(1 to "1", 2 to "2", 3 to "3")

上述代码中创建了一个可变的MutableMap集合,该集合中的操作主要有修改操作与批量操作,MutableMap集合中的查询操作与不可变集合Map中的查询操作一样。接下来,针对MutableMap集合中的修改操作与批量操作进行详细讲解。

1. 修改操作
MutableMap集合可以对该集合中的元素进行修改操作,这些修改操作主要有向集合中添加元素与移除元素,如表所示。

修改方法 方法的具体含义
put(key K, value V):V? 将指定的value与映射中指定的key添加到集合中
remove(key:K):V? 移除集合中指定的key映射的元素

接下来我们通过一个案例来演示上述表中MutableMap集合的修改操作,具体代码如下所示。

package com.itheima.chapter05
fun main(args: Array<String>) {
    val muMap = mutableMapOf(1 to " 酷客网", 2 to "酷客教程", 3 to "酷客翻译")
    muMap.put(4, " 酷客")
    println(" 添加元素后的集合:" + muMap)
    muMap.remove(4)
    println(" 删除元素后的集合:" + muMap)
    println(" 集合中元素的个数为:" + muMap.size)
}

运行结果:

添加元素后的集合:{1=酷客网, 2=酷客教程, 3=酷客翻译, 4=酷客}
删除元素后的集合:{1=酷客网, 2=酷客教程, 3=酷客翻译}
集合中元素的个数为:3

2. 批量操作
MutableMap集合中的批量操作的方法有putAll(from:Map<out K, V>)clear(),这两个方法的含义分别是向集合中添加一个集合与清空集合中的映射。接下来我们通过一个案例来演示这两个批量操作的方法,具体代码如下所示。

package com.itheima.chapter05
fun main(args: Array<String>) {
    val muMap1 = mutableMapOf(1 to " 花", 2 to "草", 3 to "树")
    val muMap2 = mutableMapOf(4 to " 猫", 5 to "狗", 6 to "猪")
    muMap1.putAll(muMap2)
    var muMapEntry = muMap1.entries
    muMapEntry.forEach {
        println("key: ${it.key} , value: ${it.value}")
    }
   muMap1.clear()
   println(" 集合中元素的个数=" + muMap1.size)
}

运行结果:

key:1, value:花
key:2, value:草
key:3, value:树
key:4, value:猫
key:5, value:狗
key:6, value:猪
集合中元素的个数=0

注意 无论是Map还是MutableMap,获取到的键、值或者键/值对的Set都是只读的,即便是MutableMap获取的MutableSet也是只读的,因为在Map或者MutableMap中,将这些Set设置为只读常量。使用keySet()函数抽取key序列,将map中的所有keys生成一个Set。使用values()函数抽取value序列,将map中的所有values生成一个Collection。一个生成Set,另一个生成Collection的原因是key是独一无二的,而value允许重复。

酷客教程相关文章:

赞(0)

评论 抢沙发

评论前必须登录!