Kotlin集合——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的元素。
    //创建不可变集合,返回值是Map
var 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}")
//创建LinkedHashMap
var 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的方法

    //创建不可变集合,返回值是Map
var map = mapOf("Java" to 86, "Kotlin" to 92, "Go" to 78)
//判断是否所有key-value对的key的长度都大于4,value都大于80
println(map.all { it.key.length > 4 && it.value > 80 })
//判断是否任一key-value对的key的长豆都大于4、value都大于80
println(map.any { it.key.length > 4 && it.value > 80 }) println("Java" in map)
println("Go" !in map) //对Map集合元素进行过滤:要求key包含li
val 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集合遍历的几种方式:

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

输出结果:

Java->86
Kotlin->92
Go->76 Java->86
Kotlin->92
Go->76 Java->86
Kotlin->92
Go->76 Java->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"] = 9000
println(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. Java集合----Map集合

    Map Map 用于保存具有映射关系的数据,因此 Map 集合里保存着两组值,一组值用于保存 Map 里的 Key,另外一组用于保存 Map 里的 Value Map 中的 key 和 value 都 ...

  2. Spring3实战第二章第二小节 IOC依赖注入 list和map集合

    Spring有多种依赖注入的形式,本篇文章仅介绍Spring通过xml进行IOC配置的方式. 1.Set注入 2.构造器注入 平常的Java开发中,程序员在某个类中需要依赖其它类的方法. 通常是new ...

  3. Collection集合与Map集合的知识点梳理

    在Java中集合分为单列集合(Collection)与双列集合(Map),本文主要对两种集合的常用实现类作一介绍,如果有不足,恳请指教更正. 1.前言 说到集合肯定要介绍下集合的概念与特点:集合是一个 ...

  4. Map集合(双列集合)

    Map集合(双列集合)Map集合是键值对集合. 它的元素是由两个值组成的,元素的格式是:key=value. Map集合形式:{key1=value1 , key2=value2 , key3=val ...

  5. Java 常用Set集合和常用Map集合

    目录 常用Set集合 Set集合的特点 HashSet 创建对象 常用方法 遍历 常用Map集合 Map集合的概述 HashMap 创建对象 常用方法 遍历 HashMap的key去重原理 常用Set ...

  6. Kotlin集合——Set集合

    Kotlin集合——Set集合 转 https://www.jianshu.com/p/3c95d7729d69   Kotlin的集合类由两个接口派生:Collection和Map. Kotlin的 ...

  7. Scala中的Map集合

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

  8. Java版本:识别Json字符串并分隔成Map集合

    前言: 最近又看了点Java的知识,于是想着把CYQ.Data V5迁移到Java版本. 过程发现坑很多,理论上看大部分很相似,实践上代码写起来发现大部分都要重新思考方案. 遇到的C#转Java的一些 ...

  9. Java常用的几种集合, Map集合,Set集合,List集合

    Java中  Object是所有类的根 Java集合常用的集合List集合.Set集合.Map集合 Map接口常用的一些方法 size() 获取集合中名值对的数量 put(key k, value v ...

随机推荐

  1. 《少年先疯队》第九次团队作业:Beta冲刺第二天

    2.1 今日完成任务情况 姚玉婷:房间管理功能测试文档的编写 马丽莎:酒店系统中商品管理功能的完善 张   琼:商品管理功能的测试 孙苗坤:商品管理功能的测试 2.2 明天任务安排 姚玉婷:酒店系统中 ...

  2. 51Nod 最大公约数之和V1,V2,V3;最小公倍数之和V1,V2,V3

    1040 最大公约数之和 给出一个n,求1-n这n个数,同n的最大公约数的和.比如:n = 6 1,2,3,4,5,6 同6的最大公约数分别为1,2,3,2,1,6,加在一起 = 15 输入 1个数N ...

  3. Codeforces Global Round 6[A,B,C]

    题意:给一个字符串,对它重新排列使得它是60的倍数. 模拟一下,需要能整除60  字符串中需要 能整除2 3 10,所以需要字符串各位数之和能整除3 并且有 一个偶数和一个0  或者两个0也行[没考虑 ...

  4. learning java AWT widowEvent and MouseEvent

    import java.awt.*; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import jav ...

  5. WSAStartup() - 使用方法

    当一个应用程序调用WSAStartup函数时, 操作系统根据请求的Socket版本来搜索相应的Socket库,然后绑定找到的Socket库到该应用程序中. 以后应用程序就可以调用所请求的Socket库 ...

  6. C++问题--error LNK2019: 无法解析的外部符号 __imp__wsprintfW

    一.问题 当编译运行C++连接Redis时,出现错误Win32_Interop_d.lib(Win32_ANSI.obj) : error LNK2019: 无法解析的外部符号 __imp__wspr ...

  7. 【一起来烧脑】一步学会CSS3体系

    [外链图片转存失败(img-yfi1VPyy-1563434266398)(https://upload-images.jianshu.io/upload_images/11158618-fc8784 ...

  8. linux线程操作

    初始化条件变量 int pthread_cond_init(pthread_cond_t *cv,pthread_cond_attr *cattr); 函数返回值:返回0表示成功,返回其他表示失败. ...

  9. [golang]在Go中处理时区

    许多新手开发人员在处理时区时感到困惑. 如何将它们存储在数据库中 如何在Go中解析它们 当将时区存储在数据库中时,请始终遵循一个标准时区,理想的做法是保存UTC时间,并在显示时区时根据需要将其转化为各 ...

  10. 浅谈sharding jdbc

    定位为轻量级Java框架,在Java的JDBC层提供的额外服务. 它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架. ...