【Kotlin】List、Set、Map简介
1 List
Java 的 List、Set、Map 介绍见 → Java容器及其常用方法汇总。
1.1 创建 List
1.1.1 emptyList
var list = emptyList<String>() // 创建空List
1.1.2 List 构造函数
var list1 = List(3) { "abc" } // [abc, abc, abc]
var list2 = ArrayList<Int>()
var list3 = LinkedList<String>()
1.1.3 listOf
var list1: List<String> = listOf() // 只读List
var list2: MutableList<String> = mutableListOf() // ArrayList
var list3: List<String> = listOf("zhang", "li", "wang")
var list4: MutableList<String> = mutableListOf("zhang", "li", "wang")
var list5 = listOfNotNull(true, 5, 3f, "abc", null)
说明:listof 和 listOfNotNull 生成的列表是只读列表,不能修改。
1.1.4 根据 Array 创建 List
var arr = arrayOf(1, 2, 3)
var list1 = listOf(arr)
var list2 = listOfNotNull(arr)
1.2 增删改查
1.2.1 增加元素
fun main() {var list = mutableListOf<String>()list.add("abc")list.add("xyz")list.add(1, "ABC")list += "XYZ"list += arrayOf("123")list += listOf("456")list += setOf("789")
}
1.2.2 删除元素
fun main() {var list = mutableListOf("abc", "efg", "xyz")list.remove("abc")list.removeAt(0)list -= "xyz"list -= arrayOf("123")list -= listOf("456")list -= setOf("789")list.clear()
}
1.2.3 修改元素
var list = mutableListOf("abc", "efg", "xyz")
list[0] = "ABC"
1.2.4 访问元素
1)访问元素
fun main() {var list = mutableListOf("zhan", "li", "wang")println(list[1]) // 打印: lilist[0] = "chen"list.any() // true, 判断List是否为空(容量为0)list.first() // chen, 获取首个元素list.last() // wang, 获取最后一个元素list.indexOf("wang") // 2, 查找元素对应的索引list.binarySearch("wang") // 2, 二分查找元素对应的索引
}
2)遍历元素
fun main() {var list = mutableListOf("abc", "efg", "xyz")list.forEach(::println) // abc, efg, xyzfor ((index, item) in list.withIndex()) {println("[$index, $item]") // [0, abc], [1, efg], [2, xyz]}
}
1.3 修改元素顺序
1.3.1 翻转元素
fun main() {var list1 = mutableListOf(1, 2, 3, 4, 5)var list2 = list1.reversed() // 翻转List元素顺序, 并生成新的Listlist1.reverse() // 在原List上翻转数组元素顺序
}
1.3.2 打乱元素顺序
fun main() {var list1 = mutableListOf(1, 2, 3, 4, 5)var list2 = list1.shuffled() // 打乱List元素顺序, 并生成新的Listlist1.shuffle() // 打乱List元素顺序
}
1.3.3 元素排序
fun main() {var list1 = mutableListOf(3, 1, 5, 2, 4)var list2 = list1.sorted() // 从小到大排序, 并生成新的Listlist1.sort() // 从小到大排序var list3 = list1.sortedDescending() // 从大到小排序, 并生成新的Listlist1.sortDescending() // 从大到小排序
}
1.4 拼接列表元素
fun main() {var list = listOf("aa", "bb", "cc")var str1 = list.joinToString()println(str1) // 打印: aa, bb, ccvar str2 = list.joinToString("-", "[", "]")println(str2) // 打印: [aa-bb-cc]var str3 = list.joinToString(limit = 2, truncated = "***")println(str3) // 打印: aa, bb, ***var str4 = list.joinToString("/") {(it + it)}println(str4) // 打印: aaaa/bbbb/cccc
}
1.5 切片
fun main() {var list1 = listOf("AA", "BBB", "CC", "DDD")var list2 = list1.slice(1..2) // [BBB, CC], 截取1,2元素var list3 = list1.take(2) // [AA, BBB], 截取前2个元素var list4 = list1.takeLast(2) // [CC, DDD], 截取最后2个元素var list5 = list1.drop(2) // [CC, DDD], 截取第2个元素后面的元素var list6 = list1.dropLast(2) // [AA, BBB], 截取倒数第2个元素前面的元素
}
1.6 统计函数
fun main() {var list = mutableListOf(1, 2, 3)list.sum() // 6list.average() // 2.0list.max() // 3list.min() // 1list.count() // 3
}
1.7 集合运算
fun main() {var list1 = listOf("AAA", "BBB")var list2 = listOf("BBB", "CCC")println(list1 + list2) // [AAA, BBB, BBB, CCC]println(list1 - list2) // [AAA]println(list1 union list2) // [AAA, BBB, CCC]println(list1 intersect list2) // [BBB]println(list1 subtract list2) // [AAA]println(list2 subtract list1) // [CCC]println((list1 - list2) union (list2 - list1)) // [AAA, CCC]
}
1.8 map
1.8.1 map
fun main() {var list1 = listOf(5, 6, 7)var list2 = list1.map { it * it } // [25, 36, 49]
}
1.8.2 mapIndexed
fun main() {var list1 = listOf(5, 6, 7)var list2 = list1.mapIndexed { index, value ->"[$index, $value]" // [[0, 5], [1, 6], [2, 7]]}
}
1.9 groupBy
fun main() {var list = listOf("AA", "BBB", "CC", "DDD")// {2=[AA, CC], 3=[BBB, DDD]}var map: Map<Int, List<String>> = list.groupBy { it.length }
}
1.10 zip
1.10.1 zip
fun main() {var list1 = listOf(1, 2, 3)var list2 = listOf("AAA", "BBB", "CCC")// [(1, AAA), (2, BBB), (3, CCC)]var pairs: List<Pair<Int, String>> = list1.zip(list2)
}
1.10.2 unzip
fun main() {// [(1, AAA), (2, BBB), (3, CCC)]var pairList: List<Pair<Int, String>> = listOf(1 to "AAA",2 to "BBB",3 to "CCC")// ([1, 2, 3], [AAA, BBB, CCC])var listPair: Pair<List<Int>, List<String>> = pairList.unzip()
}
1.11 associate
fun main() {var list = listOf("AAA", "BBBBB", "CCCC")// {AAA=3, BBBBB=5, CCCC=4}var map1: Map<String, Int> = list.associateWith { it.length }// {3=AAA, 5=BBBBB, 4=CCCC}var map2: Map<Int, String> = list.associateBy { it.length }// {3=AAA, 5=BBBBB, 4=CCCC}var map3: Map<String, Int> = list.associate { it to it.length }
}
1.12 flatten
1.12.1 flatten
fun main() {var list = listOf(listOf("AA", "BB"), listOf("CC", "DD"))var flatten: List<String> = list.flatten() // [AA, BB, CC, DD]
}
1.12.2 flatMap
fun main() {var list = listOf(Container(listOf("AA")), Container(listOf("BB")))var flatten: List<String> = list.flatMap { it.list } // [AA, BB]
}class Container(var list: List<String>)
1.13 chunked
fun main() {var list1 = listOf("AA", "BBB", "CC", "DDD", "E", "FF", "GGG")var list2 = list1.chunked(3) // [[AA, BBB, CC], [DDD, E, FF], [GGG]]
}
2 Set
2.1 创建 Set
2.1.1 emptySet
var set = emptySet<String>()
2.1.2 Set 构造函数
var set1 = HashSet<Int>()
var set2 = LinkedHashSet<String>()
var set3 = TreeSet<String>()
2.1.3 setOf
var set1: Set<String> = setOf() // 只读Set
var set2: MutableSet<String> = mutableSetOf() // LinkedHashSet
var set3: HashSet<String> = hashSetOf() // HashSet
var set4: LinkedHashSet<String> = linkedSetOf() // LinkedHashSet
var set5: TreeSet<String> = sortedSetOf() // TreeSet
var set6: Set<String> = setOf("zhang", "li", "wang")
var set7: MutableSet<String> = mutableSetOf("zhang", "li", "wang")
var set8 = setOfNotNull(true, 5, 3f, "abc", null)
2.1.4 根据 Array 创建 Set
var arr = arrayOf(1, 2, 3)
var set1 = setOf(arr)
var set2 = setOfNotNull(arr)
2.2 增删改查
2.2.1 增加元素
fun main() {var set = mutableSetOf<String>()set.add("abc")set.add("xyz")set += "ABC"set += arrayOf("123")set += listOf("456")set += setOf("789")
}
2.2.2 删除元素
fun main() {var set = mutableListOf("abc", "efg", "xyz")set.remove("abc")set.removeAt(0)set -= "xyz"set -= arrayOf("123")set -= listOf("456")set -= setOf("789")set.clear()
}
2.2.3 访问元素
1)访问元素
fun main() {var set = mutableSetOf("zhan", "li", "wang")println(set.elementAt(1)) // 打印: liset.any() // true, 判断List是否为空(容量为0)set.first() // chen, 获取首个元素set.last() // wang, 获取最后一个元素set.indexOf("wang") // 2, 查找元素对应的索引
}
2)遍历元素
fun main() {var set = mutableSetOf("abc", "efg", "xyz")set.forEach(::println) // abc, efg, xyzfor ((index, item) in set.withIndex()) {println("[$index, $item]") // [0, abc], [1, efg], [2, xyz]}
}
2.3 修改元素顺序
2.3.1 翻转元素
fun main() {var set = mutableSetOf(1, 2, 3, 4, 5)var list = set.reversed() // 翻转Set元素顺序, 并生成新的List
}
2.3.2 打乱元素顺序
fun main() {var set = mutableSetOf(1, 2, 3, 4, 5)var list = set.shuffled() // 打乱Set元素顺序, 并生成新的List
}
2.3.3 元素排序
fun main() {var set = mutableSetOf(3, 1, 5, 2, 4)var list1 = set.sorted() // 从小到大排序, 并生成新的Listvar list2 = set.sortedDescending() // 从大到小排序, 并生成新的List
}
2.4 统计函数
fun main() {var set = mutableSetOf(1, 2, 3)set.sum() // 6set.average() // 2.0set.max() // 3set.min() // 1set.count() // 3
}
2.5 集合运算
fun main() {var set1 = setOf("AAA", "BBB")var set2 = setOf("BBB", "CCC")println(set1 + set2) // [AAA, BBB, BBB, CCC]println(set1 - set2) // [AAA]println(set1 union set2) // [AAA, BBB, CCC]println(set1 intersect set2) // [BBB]println(set1 subtract set2) // [AAA]println(set2 subtract set1) // [CCC]println((set1 - set2) union (set2 - set1)) // [AAA, CCC]
}
3 Map
3.1 创建 Map
3.1.1 Pair
1)Pair 构造函数
public data class Pair<out A, out B>(public val first: A,public val second: B
) : Serializable
2)to 函数
public infix fun <A, B> A.to(that: B): Pair<A, B> = Pair(this, that)
3)应用
var pair: Pair<Int, String> = 1001 to "Tom"
3.1.2 emptyMap
var map = emptyMap<Int, String>()
3.1.3 Map 构造函数
var map1 = HashMap<Int, String>()
var map2 = Hashtable<Int, String>()
var map3 = LinkedHashMap<Int, String>()
var map4 = ConcurrentHashMap<Int, String>()
var map5 = TreeMap<Int, String>()
3.1.4 mapOf
var map: MutableMap<Int, String> = mutableMapOf(1001 to "Tom",1002 to "Mary"
)
3.2 增删改查
3.2.1 增加元素
1)put
fun main() {var map: MutableMap<Int, String> = mutableMapOf()map.put(1001, "Tom")
}
2)map[key] = value
fun main() {var map: MutableMap<Int, String> = mutableMapOf()map[1002] = "Mary"
}
2)+
fun main() {var map: MutableMap<Int, String> = mutableMapOf()map += 1001 to "John"map += arrayOf(1002 to "Zhang")map += listOf(1003 to "Wang")map += setOf(1004 to "Li")map += mapOf(1005 to "Xie")
}
4)putAll
fun main() {var map: MutableMap<Int, String> = mutableMapOf()var list1 = listOf(1, 2, 3)var list2 = listOf("zhang", "li", "wang")map.putAll(list1.zip(list2))
}
3.2.2 删除元素
fun main() {var map: MutableMap<Int, String> = mutableMapOf(1001 to "Tom",1002 to "Mary")map.remove(1001)map -= 1002map -= arrayOf(1003)map -= listOf(1004)map -= setOf(1005)map.clear()
}
3.2.3 修改元素
var map: MutableMap<Int, String> = mutableMapOf(1001 to "Tom",1002 to "Mary"
)
map[1001] = "John"
3.2.4 访问元素
1)访问元素
var map: MutableMap<Int, String> = mutableMapOf(1001 to "Tom",1002 to "Mary"
)
println(map[1001]) // Tom
2)遍历元素
fun main() {var map: MutableMap<Int, String> = mutableMapOf(1001 to "Tom",1002 to "Mary")map.forEach { key, value ->println("[$key, $value]") // [1001, Tom], [1002, Mary]}for ((key, value) in map) {println("[$key, $value]") // [1001, Tom], [1002, Mary]}
}
3.3 keys 和 values
3.3.1 keys、values、entries
fun main() {var map: MutableMap<Int, String> = mutableMapOf(1001 to "Tom",1002 to "Mary")println(map.keys) // [1001, 1002]println(map.values) // [Tom, Mary]for (entry in map.entries) {println("[${entry.key}, ${entry.value}]") // [1001, Tom], [1002, Mary]}println(map.containsKey(1001)) // trueprintln(map.containsValue("Tom")) // true
}
3.3.2 mapKeys、mapValues
fun main() {var map1: MutableMap<Int, String> = mutableMapOf(1001 to "Tom",1002 to "Mary")var map2 = map1.mapKeys { it.key - 1000 } // {1=Tom, 2=Mary}var map3 = map1.mapValues { it.value + "X" } // {1001=TomX, 1002=MaryX}
}
3.4 getOrDefault、getOrElse、getOrPut
fun main() {var map: MutableMap<Int, String> = mutableMapOf(1001 to "Tom",1002 to "Mary")// 在没有结果时返回给定的默认值var name1 = map.getOrDefault(1001, "xxx")// 使用函数式返回默认值var name2 = map.getOrElse(1001) { "xxx" }// 添加(1003, John), 并返回Johnvar name3 = map.getOrPut(1003) { "John" }
}
相关文章:
【Kotlin】List、Set、Map简介
1 List Java 的 List、Set、Map 介绍见 → Java容器及其常用方法汇总。 1.1 创建 List 1.1.1 emptyList var list emptyList<String>() // 创建空List 1.1.2 List 构造函数 var list1 List(3) { "abc" } // [abc, abc, abc] var list2 ArrayList<In…...

OpenCV 形态学处理函数
四、形态学处理(膨胀,腐蚀,开闭运算)_getstructuringelement()函数作用-CSDN博客 数字图像处理(c opencv):形态学图像处理-morphologyEx函数实现腐蚀膨胀、开闭运算、击中-击不中变换、形态学梯度、顶帽黑帽变换 - 知乎…...
互联网摸鱼日报(2024-03-27)
互联网摸鱼日报(2024-03-27) 36氪新闻 谈“肉”色变,预制菜“顶流”要完? 欧美监管机构出重拳,苹果和谷歌都要被拆分了吗? 为什么产品经理的薪资待遇,这么高? AI PC:一场浩荡的革命 二氧化…...

2014年认证杯SPSSPRO杯数学建模B题(第二阶段)位图的处理算法全过程文档及程序
2014年认证杯SPSSPRO杯数学建模 B题 位图的处理算法 原题再现: 图形(或图像)在计算机里主要有两种存储和表示方法。矢量图是使用点、直线或多边形等基于数学方程的几何对象来描述图形,位图则使用像素来描述图像。一般来说&#…...

C++基本语法
C是如何工作的 文章目录 C是如何工作的1、新建Hello World工程1.1使用Visual Studio新建项目1.2 HelloWorld1.2.1 命名空间1.2.2 输出输出 1.3 注释1.4 函数1.4.1 使用有返回的函数1.4.2 自定义函数 1、新建Hello World工程 1.1使用Visual Studio新建项目 按照下面的图片&…...

Node Sass does not yet support your current environment
项目运行时报错:Node Sass does not yet support your current environment 原因是node版本过高。 解决办法: 使用nvm管理node版本,(如何安装nvm?请点击跳转) 具体步骤如下: 1.查看当前node…...

长陆工业自动控制系统邀您到场参观2024第13届生物发酵产品与技术装备展
参展企业介绍 珠海市长陆工业自动控制系统股份有限公司于2004年在素有“百岛之市,浪漫之城”的珠江口西岸核心城市—珠海成立。长陆工业是流程工业智能制造自动化、信息化综合解决方案的提供者。产品遍及冶金、化工、建材、食品、石油、橡塑、能源、环保、物流、粮…...
数据仓库——维度表更新
维度表的更新 维度表修改规律: 绝大部分维度表都是不变的很多维度虽然会变化,但是变化的很缓慢源记录产品键不会改变产品描述及其他属性的改变都很缓慢在源OLTP 系统中,新的值会覆盖旧的值在数据仓库中,覆盖维度表的属性并不总是适当的做法…...
Web3创作整理 - 2024-02-23 ~ 2024-03-25
Web3 创作整理 - 2024-02-23 ~ 2024-03-25 整理下3月份的文章,方便大家阅读 分类文章地址🫑ETH什么是Dapp🎼ETH什么是以太坊🎵ETH如何才能拥有ETH🎶ETHBTC网络 vs ETH网络🎙️ETHETH网络中的区块链…...

CSS(一)---【CSS简介、导入方式、八种选择器、优先级】
零.前言 本系列适用于零基础小白,亦或是初级前端工程师提升使用。 知识点较为详细,如果追求非常详细,请移步官方网站或搬运网站。 1.CSS简介 CSS全称:“Cascading Style Sheets”,中文名:“层叠样式表”…...

智慧公厕解决方案打造更加智能的卫生空间
一、智慧公厕方案概述 智慧公厕方案旨在解决现有公厕存在的诸多问题,包括民众用厕困难、环境卫生状况不佳、管理效率低下等方面。针对民众的需求和管理方面的挑战,智慧公厕提供了一套综合解决方案,包括智能导航、环境监测、资源管理等功能&a…...

美团0316春招笔试题
下面是美团2024-03-16笔试真题,进行了VP,由于未参与评测,故不保证正确性,仅供参考。 第一题 小美点外卖 求和然后减去满减和红包即可。 #include <bits/stdc.h> using namespace std; using LL long long ; int n, t, x,…...

typescript 实现RabbitMQ死信队列和延迟队列 订单10分钟未付归还库存
Manjaro安装RabbitMQ 安装 sudo pacman -S rabbitmq rabbitmqadmin启动管理模块 sudo rabbitmq-plugins enable rabbitmq_managementsudo rabbitmq-server管理界面 http://127.0.0.1:15672/ 默认用户名和密码都是guest。 要使用 rabbitmqctl 命令添加用户并分配权限…...
怎样才能把重建大师的空三导进去CC?
导出空三文件xml两者都是通用的,cc和photoscan都可以兼容。 重建大师是一款专为超大规模实景三维数据生产而设计的集群并行处理软件,输入倾斜照片,激光点云,POS信息及像控点,输出高精度彩色网格模型,可一键…...

命令模式(请求与具体实现解耦)
目录 前言 UML plantuml 类图 实战代码 模板 Command Invoker Receiver Client 前言 命令模式解耦了命令请求者(Invoker)和命令执行者(receiver),使得 Invoker 不再直接引用 receiver,而是依赖于…...
开发一款MMOARPG难度到底有多大
开发一款MMOARPG难度到底有多大 MMORPG游戏开发到底有多难,我们按照过去开发的标准,就比如开发一款传奇,那时候哪会用什么别人的引擎,都是自研,从基础图形API开始。我们不考虑美术和策划,就单指程序&#x…...

RTSP应用:实现视频流的实时推送
在实现实时视频流推送的项目中,RTSP(Real Time Streaming Protocol)协议扮演着核心角色。本文将指导你通过安装FFmpeg软件,下载并编译live555,以及配置ffmpeg进行视频流推送,来实现一个基本的RTSP流媒体服务…...

Java八股文(数据结构)
Java八股文の数据结构 数据结构 数据结构 请解释以下数据结构的概念:链表、栈、队列和树。 链表是一种线性数据结构,由节点组成,每个节点包含了指向下一个节点的指针; 栈是一种后进先出(LIFO)的数据结构&a…...

ActiveMQ Artemis 系列| High Availability 主备模式(消息复制) 版本2.19.1
一、ActiveMQ Artemis 介绍 Apache ActiveMQ Artemis 是一个高性能的开源消息代理,它完全符合 Java Message Service (JMS) 2.0 规范,并支持多种通信协议,包括 AMQP、MQTT、STOMP 和 OpenWire 等。ActiveMQ Artemis 由 Apache Software Foun…...

QGIS插件系列--WhiteBox Tools
WhiteBox Tools(官网机翻): WhiteboxTools是由圭尔夫大学地貌测量和水文地理信息学研究小组(GHRG)开发的高级地理空间软件包和数据分析平台。该项目始于2017年<>月,并在分析能力方面迅速发展。WhiteboxTools的一…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...

【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...

聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...

Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...