Kotlin基础——Map集合详解

  • 一、声明和创建Map集合
  • 二、使用Map的方法
  • 三、遍历Map四种方式
  • 四、可变的Map

Kotlin的Map集合用于保存key-value对,其也被分为可变的和不可变的。

一、声明和创建Map集合

Kotlin提供了如下函数来创建Map集合:

  • mapOf():该函数返回不可变的Map集合。该函数可接受0个或多个key-value对,这些key-value对将作为Map的元素。
  • mutableMapOf():该函数返回可变的MutableMap集合。该函数可接受0个或多个key-value对,这些key-value对将作为Map的元素。
  • hashMapOf():该函数返回可变的HashMap集合。该函数可接受0个或多个key-value对,这些key-value对将作为Map的元素。
  • linkedMapOf():该函数返回可变的LinkedHashMap集合。该函数可接受0个或多个key-value对,这些key-value对将作为Map的元素。
  • sortedMapOf():该函数返回可变的TreeMap集合。该函数可接受0个或多个key-value对,这些key-value对将作为Map的元素。
    //创建不可变集合,返回值是Mapvar map = mapOf("Java" to 86, "Kotlin" to 92, "Go" to 78)println(map)//按添加顺序排列println("mapOf的返回对象的实际类型:${map.javaClass}")//创建可变集合var mutableMap = mutableMapOf("Java" to 86, "Kotlin" to 92, "Go" to 78)println(mutableMap)//按添加顺序排列println("mutableMapOf的返回对象的实际类型:${mutableMap.javaClass}")//创建HashMap集合var hashMap = hashMapOf("Java" to 86, "Kotlin" to 92, "Go" to 78)println(hashMap)//不保证排列顺序println("hashMapOf的返回对象的实际类型:${hashMap.javaClass}")//创建LinkedHashMapvar linkedHashMap = linkedMapOf("Java" to 86, "Kotlin" to 92, "Go" to 78)println(linkedHashMap)//按添加顺序排列println("linkedMapOf的返回对象的实际类型:${linkedHashMap.javaClass}")//创建TreeMap集合var treeMap = sortedMapOf("Java" to 86, "Kotlin" to 92, "Go" to 78)println(treeMap)//按key由小到大排列println("sortedMapOf的返回对象的实际类型:${treeMap.javaClass}")

输出结果:

{Java=86, Kotlin=92, Go=78}
mapOf的返回对象的实际类型:class java.util.LinkedHashMap
{Java=86, Kotlin=92, Go=78}
mutableMapOf的返回对象的实际类型:class java.util.LinkedHashMap
{Go=78, Java=86, Kotlin=92}
hashMapOf的返回对象的实际类型:class java.util.HashMap
{Java=86, Kotlin=92, Go=78}
linkedMapOf的返回对象的实际类型:class java.util.LinkedHashMap
{Go=78, Java=86, Kotlin=92}
sortedMapOf的返回对象的实际类型:class java.util.TreeMap

二、使用Map的方法

    //创建不可变集合,返回值是Mapvar map = mapOf("Java" to 86, "Kotlin" to 92, "Go" to 78)//判断是否所有key-value对的key的长度都大于4,value都大于80println(map.all { it.key.length > 4 && it.value > 80 })//判断是否任一key-value对的key的长豆都大于4、value都大于80println(map.any { it.key.length > 4 && it.value > 80 })println("Java" in map)println("Go" !in map)//对Map集合元素进行过滤:要求key包含lival filteredMap = map.filter { "li" in it.key }println(filteredMap)//将每个key-value对映射成新值,返回所有新值组成的Map集合val mappedList = map.map { "${it.key}有${it.value}节课" }println(mappedList)//根据key获取最大值println(map.maxBy { it.key })//根据value获取最小值println(map.minBy { it.value })var bMap= mapOf("Lua" to 67,"Erlang" to 73,"Kotlin" to 92)//求并集println(map+bMap)//集合相减println(map-bMap)

输出结果:

false
true
true
false
{Kotlin=92}
[Java有86节课, Kotlin有92节课, Go有78节课]
Kotlin=92
Go=78
{Java=86, Kotlin=92, Go=78, Lua=67, Erlang=73}
{Java=86, Kotlin=92, Go=78}

三、遍历Map四种方式

Map集合由多个key-value对组成,因此遍历Map集合时既可以通过对key-value对进行遍历,也可先遍历key,再通过key来获取对应的value进行遍历。

  • 下面是对Map集合遍历的几种方式:
    //创建不可变集合,返回值是Mapvar map = mapOf("Java" to 86, "Kotlin" to 92, "Go" to 76)//遍历Map的key-value对,entris元素返回key-value对组成的Setfor (en in map.entries) {println("${en.key}->${en.value}")}//先遍历Map的key,再通过key获取valuefor (key in map.keys) {println("${key}->${map[key]}")}//直接用for-in循环遍历Mapfor ((key, value) in map) {println("${key}->${value}")}//用Lambda表达式遍历Mapmap.forEach({ println("${it.key}->${it.value}") })

输出结果:

Java->86
Kotlin->92
Go->76Java->86
Kotlin->92
Go->76Java->86
Kotlin->92
Go->76Java->86
Kotlin->92
Go->76

四、可变的Map

可变的Map为操作key-value对提供了如下方法:

  • clear():清空所有的key-value对。
  • put(key:K,value:V):放入key-value对。如果原来已有key,value将被覆盖。
  • putAll(form:Map<out K,V>):批量放入多个key-value对。
  • remove(key:K):删除key-value对。
    var mutableMap = mutableMapOf("OC" to 96, "PHP" to 3400, "Perl" to 4300, "Ruby" to 5600, "Go" to 5600)//以方括号语法放入key-value对mutableMap["Swift"] = 9000println(mutableMap)//以put方法放入key-value对mutableMap.put("OC", 8600)println(mutableMap)//删除key为"PHP"的key-value对mutableMap.remove("PHP")println(mutableMap)println(mutableMap.size)//删除所有元素mutableMap.clear()println(mutableMap)println(mutableMap.size)

输出结果:

{OC=96, PHP=3400, Perl=4300, Ruby=5600, Go=5600, Swift=9000}
{OC=8600, PHP=3400, Perl=4300, Ruby=5600, Go=5600, Swift=9000}
{OC=8600, Perl=4300, Ruby=5600, Go=5600, Swift=9000}
5
{}
0

更多精彩内容请扫码关注:

Kotlin 基础——Map集合详解相关推荐

  1. Kotlin 基础——Set集合详解

    Kotlin基础--Set集合详解 一.声明和创建 二.使用Set的方法 三.遍历Set 四.可变的Set 4.1.添加元素 4.2.删除元素 Kotlin的集合类由两个接口派生:Collection ...

  2. 集合 (二) ----- Map集合详解

    相关文章: <集合 (一) ----- 集合的基本概念与Collection集合详解> <集合 (二) ----- Map集合详解> 文章目录 Map集合详解 一.Map集合基 ...

  3. Java—Map集合详解(HashMap/Hashtable/LinkedHashMap/Properties/TreeMap/WeakHashMap/IdentityHashMap/EnumMap)

    关注微信公众号:CodingTechWork,一起学习进步. Map Map集合介绍   Map(也称为字典.关联数组)是用于保存具有映射关系的数据,保存两组值,key和value,这两组值可以是任何 ...

  4. java 中map_Java Map集合详解

    Map 是一种键-值对(key-value)集合,Map 集合中的每一个元素都包含一个键对象和一个值对象.其中,键对象不允许重复,而值对象可以重复,并且值对象还可以是 Map 类型的,就像数组中的元素 ...

  5. java map集合详解_JAVA干货:Map 集合详解

    java.util.Map集合 Map集合的特点: 1.Map集合是一个双列集合,一个元素包含两个值(一个key,一个value) 2.Map集合中的元素,key和value的数据类型可以相同,也可以 ...

  6. java的Map集合 详解Map集合

    一.Map集合的特点: Map集合的特点: 1.Map是一个双列集合,一个元素包含两个值(一个key,一个value) 2.Map集合中的元素,key和value的数据类型可以相同,也可以不同 3.M ...

  7. Java~Map集合详解

    文章目录 Map介绍 核心Map 内部哈希:哈希映射技术 常用方法 遍历Map Map介绍 java.util中的集合类包含Java中某些最常用的类,其中最常用的集合类就是List和Map. 并且在集 ...

  8. 集合 (一) ----- 集合的基本概念与Collection集合详解

    相关文章: <集合 (一) ----- 集合的基本概念与Collection集合详解> <集合 (二) ----- Map集合详解> 文章目录 集合的基本概念 一.集合的分类 ...

  9. Java集合详解之Map

    一.首先看看集合框架体系图 从图中可以看到,Map接口扩展了Iterator接口,关于Iterator接口详解请移步:Iterator接口详解 二.Map是什么? Map<k,v>使用键值 ...

最新文章

  1. 如何在科研论文中画出漂亮的插图?(附代码)
  2. 本科计算机科学与技术专业物理,中国工程物理研究院职工工学院计算机科学与技术(本科)专业介绍...
  3. 关于删除数据仓库的数据
  4. 1_boostrap概述
  5. 安卓代码迁移:ActionBarActivity: cannot be resolved to a type
  6. jzoj4274-终章-剑之魂【位运算,贪心】
  7. pascal行人voc_在Pascal VOC 数据集上训练YOLOv3模型
  8. 分享 :用五个趣味案例教你数据分析的基本思想
  9. Linux 命令(19)—— tar 命令
  10. Cowrie 部署 SSH 蜜罐
  11. 如何制作圆角布局..?
  12. SQL NOTE--VIEW
  13. 媒体查询以及flexbox,响应式图片
  14. 天勤数据结构代码——递归
  15. 版本控制工具SVN的使用
  16. 解决卸载wifi共享软件后无法连网的问题
  17. mysql chunk_【MySQL参数】-innodb_buffer_pool_chunk_size
  18. 工业机器人(四)——传感元件制作
  19. 看完代码回首看论文:YOLOv3重读
  20. Manjaro Linux KDE 安装后的配置

热门文章

  1. 短信猫数据库中间件二次开发使用说明
  2. DX SDK Jun10 安装失败解决方法
  3. DXSDK_Jun10安装错误解决!/directX安装错误
  4. Python+Selenium 网页自动化 exe 程序编程实现(最全避坑指南)
  5. 卸载 2345输入法 款流氓软件
  6. HTTPS 和 证书
  7. 华为m2 803l 电信设置上网,亲测
  8. 腾讯俞栋:AI发展不是独角戏,要与合作伙伴一起AI in All
  9. 基于ar9331 mips架构AP121 uboot分析(3) 启动流程
  10. OpenWRT AR9331 mjpg-streamer 网络安装和离线ipk安装