Kotlin集合——Map集合
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集合的更多相关文章
- Java集合----Map集合
Map Map 用于保存具有映射关系的数据,因此 Map 集合里保存着两组值,一组值用于保存 Map 里的 Key,另外一组用于保存 Map 里的 Value Map 中的 key 和 value 都 ...
- Spring3实战第二章第二小节 IOC依赖注入 list和map集合
Spring有多种依赖注入的形式,本篇文章仅介绍Spring通过xml进行IOC配置的方式. 1.Set注入 2.构造器注入 平常的Java开发中,程序员在某个类中需要依赖其它类的方法. 通常是new ...
- Collection集合与Map集合的知识点梳理
在Java中集合分为单列集合(Collection)与双列集合(Map),本文主要对两种集合的常用实现类作一介绍,如果有不足,恳请指教更正. 1.前言 说到集合肯定要介绍下集合的概念与特点:集合是一个 ...
- Map集合(双列集合)
Map集合(双列集合)Map集合是键值对集合. 它的元素是由两个值组成的,元素的格式是:key=value. Map集合形式:{key1=value1 , key2=value2 , key3=val ...
- Java 常用Set集合和常用Map集合
目录 常用Set集合 Set集合的特点 HashSet 创建对象 常用方法 遍历 常用Map集合 Map集合的概述 HashMap 创建对象 常用方法 遍历 HashMap的key去重原理 常用Set ...
- Kotlin集合——Set集合
Kotlin集合——Set集合 转 https://www.jianshu.com/p/3c95d7729d69 Kotlin的集合类由两个接口派生:Collection和Map. Kotlin的 ...
- Scala中的Map集合
1. Map集合 1.1 Scala中的Map介绍 Scala中的Map 和Java类似,也是一个散列表,它存储的内容也是键值对(key-value)映射,Scala中不可变的Map是有序的,可变的M ...
- Java版本:识别Json字符串并分隔成Map集合
前言: 最近又看了点Java的知识,于是想着把CYQ.Data V5迁移到Java版本. 过程发现坑很多,理论上看大部分很相似,实践上代码写起来发现大部分都要重新思考方案. 遇到的C#转Java的一些 ...
- Java常用的几种集合, Map集合,Set集合,List集合
Java中 Object是所有类的根 Java集合常用的集合List集合.Set集合.Map集合 Map接口常用的一些方法 size() 获取集合中名值对的数量 put(key k, value v ...
随机推荐
- http://www.easytest.xyz/login_action/
http://www.easytest.xyz/login_action/一个挺牛逼的系统,有空学习下 https://www.cnblogs.com/1fengchen1/archive/2019/ ...
- Java抽象语法树AST,JCTree 分析
JCTree简要分析文章目录JCTree简要分析JCAnnotatedTypeJCAnnotationJCArrayAccessJCArrayTypeTreeJCAssertJCAssignJCAss ...
- 51nod 2499 不降的数字
小b有一个非负整数 N,她想请你找出 ≤N≤N 的最大整数x,满足x各个位数上的数字是不降的.也就是说,设x的十进制表示为 a1,a2,…,ama1,a2,…,am,则对于任意 1≤i<m1≤i ...
- 抖音热门BGM爬虫下载
下午无聊在某网上刷了会儿抖音,发现有些音乐还是挺好听的,可以用来做手机铃声,于是想办法从某网上把歌曲爬下来 附上代码: #!/usr/bin/env python # -*- coding: utf- ...
- 关于JDBCUtils的模糊查询问题
1.JDBCUtils的模糊查询问题解决方法 数据库jdbc工具类的模糊查询最核心的就是用like %内容%,但是我们对于界面输入进来的东西都是用?来替代的,那么就代表着我们不能吧%%写在问号旁边.否 ...
- 010——MATLAB运行错误跳到下一个循环
(一)MATLAB运行错误跳到下一个循环 :%文件的个数 try %运行的程序放到这里 catch continue%假如上面的没法执行则执行continue,到下个循环 end
- Dominating Patterns (AC 自动鸡模版题, 出现次数最多的子串)
传送门 题意: 给你n个模式串, 再给你一个 文本串,问模式串在文本串中出现次数最多是多少. 出现次数最多的模式串有哪些. 解: 模版题. #include <bits/stdc++.h> ...
- [分享]Passcape Software - Windows Password Recovery
[分享]Passcape Software - Windows Password Recovery https://bbs.pediy.com/thread-245965.htm [[other] ...
- BZOJ 4571: [Scoi2016]美味
二次联通门 : BZOJ 4571: [Scoi2016]美味 /* BZOJ 4571: [Scoi2016]美味 dalao们都在说这题如果没有加法balabala就可以用可持久化trie解决了 ...
- 7中漂亮的纯css字体
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...