【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" }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/777530.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

fastadmin学习04-一键crud

FastAdmin 默认内置一个 test 表&#xff0c;可根据表字段名、字段类型和字段注释通过一键 CRUD 自动生成。 create table fa_test (id int unsigned auto_increment comment ID primary key,user_id int(10) default 0 null…

免费软件“蓝莓投屏”:支持多个Airplay同时镜像的投屏软件。

引言&#xff1a; 由于定制盒子(3288)不支持投屏功能&#xff08;有些5.1不支持&#xff0c;安卓4.X本身也不支持&#xff09;&#xff0c;需要借助第三方的投屏软件来实现这一需求。所以&#xff0c;研究半天&#xff0c;蓝莓投屏以其简便易用的特性脱颖而出&#xff0c;只需…

每日一题--最长连续序列

洛阳春-岑参 人到洛阳花似锦&#xff0c;偏我来时不逢春。 谁道三冬无春色&#xff0c;冰山高处万里银 目录 题目描述 思路分析 方法及其时间复杂度 法一 暴力枚举&#xff1a; 法二 哈希表遍历&#xff1a; 法三 并查集&#xff1a; 个人总结 题目描述 128. 最长连续序…

Java安全篇-Fastjson漏洞

前言知识&#xff1a; 一、json 概念&#xff1a; json全称是JavaScript object notation。即JavaScript对象标记法&#xff0c;使用键值对进行信息的存储。 格式&#xff1a; {"name":"wenda","age":21,} 作用&#xff1a; JSON 可以作为…

网络工程师实验命令(华为数通HCIA)

VRP系统的基本操作 dis version #查看设备版本信息 sys #进入系统视图 system-name R1 #改设备名字为R1进入接口配置IP地址 int g0/0/0 ip address 192.168.1.1 255.255.255.0 #配置接口地址为192.168.1.1/255.255.255.0 ip address 192.168.1.2 24 sub #此…

Apache Hive的基本使用语法(二)

Hive SQL操作 7、修改表 表重命名 alter table score4 rename to score5;修改表属性值 # 修改内外表属性 ALTER TABLE table_name SET TBLPROPERTIES("EXTERNAL""TRUE"); # 修改表注释 ALTER TABLE table_name SET TBLPROPERTIES (comment new_commen…

二维双指针,滑动窗口

二维双指针 思路&#xff1a;考虑暴力做法&#xff0c;我们统计前缀和&#xff0c;然后枚举以 ( x 1 , y 1 ) (x_1,y_1) (x1​,y1​), ( x 2 , y 2 ) (x_2,y_2) (x2​,y2​)为左上&#xff0c;右下顶点的矩阵有多少是合法的&#xff0c;那么&#xff0c;这样的时间复杂度为 n 4…

【二十七】【算法分析与设计】归并(1),912. 排序数组,归并排序,递归函数的时间复杂度计算,LCR 170. 交易逆序对的总数

912. 排序数组 给你一个整数数组 nums&#xff0c;请你将该数组升序排列。 示例 1&#xff1a; 输入&#xff1a;nums [5,2,3,1] 输出&#xff1a;[1,2,3,5] 示例 2&#xff1a; 输入&#xff1a;nums [5,1,1,2,0,0] 输出&#xff1a;[0,0,1,1,2,5] 提示&#xff1a; 1 < …

Linux 系统 CentOS7 上搭建 Hadoop HDFS集群详细步骤

集群搭建 整体思路:先在一个节点上安装、配置,然后再克隆出多个节点,修改 IP ,免密,主机名等 提前规划: 需要三个节点,主机名分别命名:node1、node2、node3 在下面对 node1 配置时,先假设 node2 和 node3 是存在的 **注意:**整个搭建过程,除了1和2 步,其他操作都使…

Mini-Gemini: Mining the Potential of Multi-modality Vision Language Models

Mini-Gemini: Mining the Potential of Multi-modality Vision Language Models 相关链接&#xff1a;arxiv 关键字&#xff1a;Vision Language Models、Multi-modality、High-Resolution Visual Tokens、High-Quality Data、VLM-guided Generation 摘要 在这项工作中&#x…

unity学习(76)--窗口化和后台运行

1.通过如下方式将编译的游戏设置为窗口模式。 成功&#xff1a; 2.现在只有鼠标点击的窗体游戏运动&#xff0c;其他窗体游戏都会卡住。 2.1build setting中 2.2unity内部Project Settings 也被同步修改了

火车头通过关键词采集文章的原理

随着互联网信息的爆炸式增长&#xff0c;网站管理员和内容创作者需要不断更新和发布新的文章&#xff0c;以吸引更多的用户和提升网站的排名。而火车头作为一款智能文章采集工具&#xff0c;在这一过程中发挥着重要作用。本文将探讨火车头如何通过关键词采集文章&#xff0c;以…

CDH集群hive初始化元数据库失败

oracle数据库操作&#xff1a; 报错如下&#xff1a;命令 (Validate Hive Metastore schema (237)) 已失败 截图如下&#xff1a; 后台日志部分摘录&#xff1a; WARNING: Use “yarn jar” to launch YARN applications. SLF4J: Class path contains multiple SLF4J binding…

Vite 为什么比 Webpack 快?

目录 1. Webpack 的构建原理 2. Script 的模块化&#xff08;主流浏览器对 ES Modules 的支持&#xff09; 3. Webpack vs Vite 开发模式的差异 对 ES Modules 的支持 底层语言的差异 热更新的处理 1. Webpack 的构建原理 前端之所以需要类似于 Webpack 这样的构建工具&…

主机安全-德迅卫士

什么是主机安全&#xff1f; 主机安全&#xff0c;其核心内容包括安全应用交付系统、应用监管系统、操作系统安全增强系统和运维安全管控系统。它的具体功能是指保证主机在数据存储和处理的保密性、完整性&#xff0c;可用性&#xff0c;它包括硬件、固件、系统软件的自身安全&…

CMakeLists生成动态库.so和静态库.a

一、下载NDK CMake - NDK : 26.2.11394342 或 23.1.7779620 - CMake : 3.22.1 二、新建android\app\CMakeLists.txt 文件CMakeLists.txt内容 cmake_minimum_required(VERSION 3.4.1) #mker为项目名称 project(mker)#设置生成的so动态库最后输出的路径 set(CMAKE_LIBRARY_OUTP…

面试算法-122-翻转二叉树

题目 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1] 解 class Solution {public TreeNode invertTree(TreeNode root) {return dfs(…

第二证券今日投资参考:低空经济迎利好 自动驾驶商业化提速

昨日&#xff0c;两市股指盘中弱势震动&#xff0c;午后加快下探&#xff0c;沪指失守3000点大关&#xff0c;深成指、创业板指跌超2%&#xff1b;到收盘&#xff0c;沪指跌1.26%报2993.14点&#xff0c;深成指跌2.4%报9222.47点&#xff0c;创业板指跌2.81%报1789.82点&#x…

DC电源模块的设计与制造流程

BOSHIDA DC电源模块的设计与制造流程 DC电源模块是一种用于将交流电转换为直流电的设备。它广泛应用于各种电子设备中&#xff0c;如电子产品、工业仪器、电视等。下面是DC电源模块的设计与制造流程的简要描述&#xff1a; 1. 需求分析&#xff1a;在设计DC电源模块之前&#…

设计模式(一)简介

一、书籍推荐及博客 大话设计模式 设计模式的艺术 XXL开源社区 | 博客 二、通俗版概念 创建型模式、结构型模式、行为型模式 怎么建房子、建什么样的房子、建的房子有什么用 三、重点模式及简述 1、创建型模式 工厂方法&#xff08;多态工厂的实现&#xff09; 抽象工厂…