我的编程空间,编程开发者的网络收藏夹
学习永远不晚

【Kotlin】集合操作总结 ( List 集合 | MutableList 集合 | List 集合遍历 | Set 集合 | MutableSet 集合 | Map 集合 | 可变 Map集合 )

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

【Kotlin】集合操作总结 ( List 集合 | MutableList 集合 | List 集合遍历 | Set 集合 | MutableSet 集合 | Map 集合 | 可变 Map集合 )

文章目录







Kotlin 中的集合分为两类 , 只读集合可变集合 ;


调用 listOf 函数 , 可以 直接创建 List 集合 ;
通过 [] 下标可以 直接获取 List 集合中的元素 ;

fun main() {    val list = listOf("Tom", "Jerry")    println("${list[0]}")}

上述代码执行结果 :

Tom






除了使用 [] 下标获取 List 集合元素外 , Kotlin 还提供了 安全获取集合元素的 方法 : getOrElsegetOrNull 函数 ;


1、getOrElse 函数


List.getOrElse(index: Int, defaultValue: (Int) -> T): T 函数原型 :

@kotlin.internal.InlineOnlypublic inline fun <T> List<T>.getOrElse(index: Int, defaultValue: (Int) -> T): T {    return if (index >= 0 && index <= lastIndex) get(index) else defaultValue(index)}

参数分析 : 在该函数中 , 传入了两个参数 , 第一个参数是元素的索引 , 第二个参数是一个 Lambda 表达式 ; 该 Lambda 表达式的 Int 类型参数就是 index: Int 参数 ;

返回值分析 : 返回给定[index]处的元素,如果[index]不在列表范围内,则 返回调用[defaultValue]函数的结果。


2、getOrNull函数


List.getOrNull(index: Int): T? 函数原型 :

public fun <T> List<T>.getOrNull(index: Int): T? {    return if (index >= 0 && index <= lastIndex) get(index) else null}

参数分析 : 在该函数中 , 传入函数索引参数 ;

返回值分析 : 返回给定[index]处的元素,如果[index]不在列表范围内,则返回’ null '。







代码示例 :

fun main() {    var list = listOf("Tom", "Jerry")    println("${list[0]}")    println(list.getOrElse(2, {"UnKnown"}))    println(list.getOrNull(3))}

执行结果 :

TomUnKnownnull

在这里插入图片描述







使用 listOf 函数 创建的 List 集合 只读列表集合 ;

使用 mutableListOf 函数 创建的 MutableList 集合可变列表集合 ;


调用 MutableList#toList 函数 , 可以 将 可变列表集合 转为 只读列表集合 ;

调用 List#toMutableList 函数 , 可以 将 只读列表集合 转为 可变列表集合 ;


代码示例 :

fun main() {    // 创建可变列表集合    var mutableList = mutableListOf("Tom", "Jerry")    // 添加元素    mutableList.add("Jack")    // 删除元素    mutableList.remove("Tom")    println(mutableList)    // 将 可变列表集合 转为 只读列表集合    val list: List<String> = mutableList.toList()    // 将 只读列表集合 转为 可变列表集合    val mutable: MutableList<String> = list.toMutableList()}

执行结果 :

[Jerry, Jack]






修改 MutableList 集合 的 函数 统称为 mutator 函数 ;


1、添加元素运算符 += 和 删除元素运算符 -=


运算符重载 : MutableList 集合 还有一些 运算符重载 , 添加元素运算符 +=删除元素运算符 -= ;

  • 向 MutableList 集合 中添加一些元素 , 可使用 += 运算符 :
mutableList += "Jack"

其效果等同于

mutableList.add("Jack")
  • 从 MutableList 集合 中删除一些元素 , 可使用 -= 运算符 :
mutableList -= "Tom"

其效果等同于

mutableList.remove("Tom")

2、通过 Lambda 表达式筛选要删除的元素


通过 Lambda 表达式筛选要删除的元素 : Lambda 表达式返回 boolean 值 , 如果返回 true , 则删除该元素 , 返回 false 则不处理该元素 ;

fun main() {    // 创建可变列表集合    val mutableList = mutableListOf("Tom", "Jerry")    // 通过 Lambda 表达式筛选要操作的元素    // 删除包含 字母 T 的元素    mutableList.removeIf {        it.contains("T")    }    println(mutableList)}

执行结果 :

[Jerry]






List 集合遍历 :

  • for in 循环遍历 :
    // 使用 for in 循环遍历    for (name in list) {        println("for : $name")    }
  • forEach 遍历 :
@kotlin.internal.HidesMemberspublic inline fun <T> Iterable<T>.forEach(action: (T) -> Unit): Unit {    for (element in this) action(element)}
  • forEachIndexed 遍历并同时获取索引值 :
public inline fun <T> Iterable<T>.forEachIndexed(action: (index: Int, T) -> Unit): Unit {    var index = 0    for (item in this) action(checkIndexOverflow(index++), item)}

代码示例 :

fun main() {    // 创建可变列表集合    val list = listOf("Tom", "Jerry", "Jack")    // 使用 for in 循环遍历    for (name in list) {        println("for : $name")    }    // 使用 forEach 遍历    list.forEach {        println("forEach : $it")    }    // 遍历时获取索引位置    list.forEachIndexed { index, s ->        println("$index : $s")    }}

执行结果 :

for : Tomfor : Jerryfor : JackforEach : TomforEach : JerryforEach : Jack0 : Tom1 : Jerry2 : Jack






List 通过解构一次性给多个元素赋值 :

fun main() {    // 创建可变列表集合    val list = listOf("Tom", "Jerry", "Jack")    // 使用 list 集合一次性给 3 个元素赋值    val (name1, name2, name3) = list    println("name1 = $name1")    println("name2 = $name2")    println("name3 = $name3")}

执行结果 :

name1 = Tomname2 = Jerryname3 = Jack

如果集合中有 3 个元素 , 但是只需要给 2 个元素赋值 , 这里可使用 _ 跳过某个元素的赋值 ;

代码示例 :

fun main() {    // 创建可变列表集合    val list = listOf("Tom", "Jerry", "Jack")    // 使用 list 集合一次性给 2 个元素赋值, 第 1 个元素跳过    val (name1, _, name3) = list    println("name1 = $name1")    println("name3 = $name3")}

执行结果 :

name1 = Tomname3 = Jack






List 集合中的元素是 可以重复 的 , Set 集合中的元素 不可重复 ;

调用 setOf 函数 , 可以创建 Set 集合 ;

调用 Set#elementAt 函数 , 可以 读取 Set 集合中的元素 ;


代码示例 :

fun main() {    val set = setOf("Tom", "Jerry", "Jack")    println(set.elementAt(1))}

执行结果 :

Jerry






调用 mutableSetOf 函数 , 可以创建 可变 Set 集合 ;

可变 Set 集合 , 可以

  • 使用 += 运算符 添加元素 ,
  • 使用 -= 运算符删除元素 ;

代码示例 :

fun main() {    val mutableSet = mutableSetOf("Tom", "Jerry", "Jack")    mutableSet += "Bill"    mutableSet -= "Jerry"    println(mutableSet)    println(mutableSet.elementAt(2))}

执行结果 :

[Tom, Jack, Bill]Bill






调用 List#toSet() 函数 , 可以将 List 集合转为 Set 集合 , 转换过程中会 自动删除重复的元素 ;

调用 List#distinct() 函数 , 可以去除重复元素 ;

调用 Set#toList() 函数 , 可以将 Set 集合转为 List 集合 ;


代码示例 :

fun main() {    val list = listOf("Tom", "Jerry", "Jack", "Tom", "Jerry", "Jack")    println(list)    println(list.distinct())    val list2 = listOf("Tom", "Jerry", "Jack", "Tom", "Jerry", "Jack")    val set = list2.toSet()    println(set)}

执行结果 :

[Tom, Jerry, Jack, Tom, Jerry, Jack][Tom, Jerry, Jack][Tom, Jerry, Jack]






数组类型 :

  • Int 类型数组 : IntArray 数组类型 , 使用 intArrayOf 函数创建 ;
  • Double 类型数组 : DoubleArray 数组类型 , 使用 doubleArrayOf 函数创建 ;
  • Long 类型数组 : LongArray 数组类型 , 使用 longArrayOf 函数创建 ;
  • Short 类型数组 : ShortArray 数组类型 , 使用 shortArrayOf 函数创建 ;
  • Byte 类型数组 : ByteArray 数组类型 , 使用 byteArrayOf 函数创建 ;
  • Float 类型数组 : FloatArray 数组类型 , 使用 floatArrayOf 函数创建 ;
  • Boolean 类型数组 : BooleanArray 数组类型 , 使用 booleanArrayOf 函数创建 ;
  • 普通对象类型数组 : Array 数组类型 , 使用 arrayOf 函数创建 ;

代码示例 :

fun main() {    var intArray = intArrayOf(0, 1, 2, 3)    var doubleArray = doubleArrayOf(0.1, 0.2, 0.3)    var longArray = longArrayOf(0, 1, 2, 3)    var shortArray = shortArrayOf(0, 1, 2, 3)}






调用 mapOf 函数 创建 Map 集合 , 键值对 元素有两种初始化方式 :

  • 使用 to 函数进行初始化 : 在参数中使用 键 to 值 的方式进行初始化 ;
  • 使用 Pair 对象进行初始化 : 传入 Pair(键, 值) 进行初始化 ;

to 函数原型如下 , 其本质也是返回 Pair 类型的实例对象 ;

public infix fun <A, B> A.to(that: B): Pair<A, B> = Pair(this, that)

代码示例 :

fun main() {    val map = mapOf("Tom" to 18, "Jerry" to 12, "Jack" to 20)    println(map)    val map2 = mapOf(Pair("Tom", 18), Pair("Jerry", 12), Pair("Jack", 20))    println(map2)}

执行结果 :

{Tom=18, Jerry=12, Jack=20}{Tom=18, Jerry=12, Jack=20}






获取 Map 值 :

  • 使用 取值运算符 [] 获取 Map 集合中的值 , 运算符中传入 键 , 如果找不到 键 对应的 值 , 返回 null ;
  • 使用 Map#getValue 函数 , 获取 键 对应的 值 , 如果没有找到则抛出异常 ;
public fun <K, V> Map<K, V>.getValue(key: K): V = getOrImplicitDefault(key)
  • 使用 Map#getOrElse 函数 , 获取 键 对应的 值 , 如果没有找到则返回 Lambda 表达式 参数 的返回值 ;
public inline fun <K, V> Map<K, V>.getOrElse(key: K, defaultValue: () -> V): V = get(key) ?: defaultValue()
  • 使用 Map#getOrDefault 函数 , 获取 键 对应的 值 , 如果没有找到则返回默认值 ;
    public fun getOrDefault(key: K, defaultValue: @UnsafeVariance V): V {        // See default implementation in JDK sources        throw NotImplementedError()    }

代码示例 :

fun main() {    val map = mapOf("Tom" to 18, "Jerry" to 12, "Jack" to 20)    println(map)    val map2 = mapOf(Pair("Tom", 18), Pair("Jerry", 12), Pair("Jack", 20))    println(map2)    // 使用 取值运算符 `[]`  获取 Map 集合中的值 , 运算符中传入 键 , 如果找不到 键 对应的 值 , 返回 null    println(map["Tom"])    // 使用 Map#getValue 函数 , 获取 键 对应的 值 , 如果没有找到则抛出异常    println(map.getValue("Tom"))    // 使用 Map#getOrElse 函数 ,  获取 键 对应的 值 , 如果没有找到则返回 Lambda 表达式 参数 的返回值    println(map.getOrElse("Tim", {20}))    // 使用 Map#getOrDefault 函数 , 获取 键 对应的 值 , 如果没有找到则返回默认值    println(map.getOrDefault("Tim", 88))}

执行结果 :

{Tom=18, Jerry=12, Jack=20}{Tom=18, Jerry=12, Jack=20}18182088






Map 遍历方式 :

  • forEach 函数 , 传入 Lambda 表达式参数 , 该 Lambda 表达式的参数为 Map.Entry 类型 ;
public inline fun <K, V> Map<out K, V>.forEach(action: (Map.Entry<K, V>) -> Unit): Unit {    for (element in this) action(element)}
  • forEach 函数 , 传入 Lambda 表达式参数 , 该 Lambda 表达式的 两个参数为 实际的 键值对 的类型 ;
    default void forEach(BiConsumer<? super K, ? super V> action) {        Objects.requireNonNull(action);        for (Map.Entry<K, V> entry : entrySet()) {            K k;            V v;            try {                k = entry.getKey();                v = entry.getValue();            } catch(IllegalStateException ise) {                // this usually means the entry is no longer in the map.                throw new ConcurrentModificationException(ise);            }            action.accept(k, v);        }    }

代码示例 :

fun main() {    val map = mapOf("Tom" to 18, "Jerry" to 12, "Jack" to 20)    println(map)    map.forEach {        // 可操作 Entry 对象        println("${it.key} = ${it.value}")    }    map.forEach { key: String, value: Int ->        // 可获取具体的键和值        println("$key = $value")    }}

执行结果 :

{Tom=18, Jerry=12, Jack=20}Tom = 18Jerry = 12Jack = 20Tom = 18Jerry = 12Jack = 20






通过调用 mutableMapOf 函数 , 可创建 可变 Map 集合 ;

代码示例 :

fun main() {    val mutableMap = mutableMapOf("Tom" to 18, "Jerry" to 12, "Jack" to 20)    println(mutableMap)    // 增加元素    mutableMap += "Rose" to 18    mutableMap.put("Tim", 21)    println(mutableMap)    // 查询是否有 某个键 对应的值, 如果没有则添加一个默认值进去    mutableMap.getOrPut("Kate", {19} )    println(mutableMap)}

执行结果 :

{Tom=18, Jerry=12, Jack=20}{Tom=18, Jerry=12, Jack=20, Rose=18, Tim=21}{Tom=18, Jerry=12, Jack=20, Rose=18, Tim=21, Kate=19}

来源地址:https://blog.csdn.net/han1202012/article/details/128717667

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

【Kotlin】集合操作总结 ( List 集合 | MutableList 集合 | List 集合遍历 | Set 集合 | MutableSet 集合 | Map 集合 | 可变 Map集合 )

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何遍历 Java 的 Map 集合?(java的map集合怎么遍历)

在Java编程中,Map是一种常用的数据结构,用于存储键值对。遍历Map集合是很常见的操作,下面将介绍几种遍历JavaMap集合的方法。一、使用forEach方法遍历Java8引入了新的forEach
如何遍历 Java 的 Map 集合?(java的map集合怎么遍历)
Java2024-12-21

javascript ES6中set集合、map集合如何使用

本文小编为大家详细介绍“javascript ES6中set集合、map集合如何使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“javascript ES6中set集合、map集合如何使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢
2023-07-04

JAVA如何遍历Map集合

这篇文章将为大家详细讲解有关JAVA如何遍历Map集合,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。方法一:首先去通过获取迭代器,通过迭代器去遍历集合,获取key然后通过key去获取value,然后就完成
2023-06-14

如何实现 Java Set 转 List 集合?(java set转list集合怎么实现)

在Java编程中,经常会遇到将Set集合转换为List集合的需求。Set是一种不允许重复元素的集合,而List是一种允许重复元素的有序集合。以下是几种实现JavaSet转List集合的方法:方法一:使用迭代器
如何实现 Java Set 转 List 集合?(java set转list集合怎么实现)
Java2024-12-15

Java如何实现Map集合遍历

这篇文章给大家分享的是有关Java如何实现Map集合遍历的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用
2023-05-30

java怎么遍历set集合

在Java中,可以使用foreach循环或迭代器来遍历Set集合。1. 使用foreach循环遍历Set集合:```javaSet set = new HashSet();set.add("Hello");set.add("World");
2023-10-10

Java 中遍历 Map 集合的方法都有哪些呢?(java遍历map集合的方法有哪些)

在Java编程中,Map是一种常用的数据结构,用于存储键值对。遍历Map集合是经常需要进行的操作,以下是几种常见的遍历Map集合的方法:一、使用forEach方法(Java8及以上版本)Java8引入了
Java 中遍历 Map 集合的方法都有哪些呢?(java遍历map集合的方法有哪些)
Java2024-12-18

javascript ES6中set集合、map集合使用方法详解与源码实例

这篇文章主要介绍了javascript ES6中set、map使用方法详解与源码实例,需要的朋友可以参考下
2022-12-10

java遍历map集合的方法有哪些

Java遍历Map集合的方法有以下几种:1. 使用entrySet()方法遍历:通过Map的entrySet()方法获取Map集合的所有键值对的Set视图,然后使用foreach循环遍历每个键值对。示例代码:```javafor (Map.
2023-09-13

Java中Map集合的三种遍历方式

文章目录 Map集合的遍历方式Map集合的遍历方式一: 键找值Map集合的遍历方式二: 键值对Map集合的遍历方式三: Lambda Map集合的遍历方式 Map集合的遍历方式有3种: 方式一:键找值的方式遍历:先
2023-08-16

Java中逆序遍历List集合的实现

本文主要介绍了Java中逆序遍历List集合的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-01-28

Python中的SET集合操作

python的set和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), intersection(交), difference(差)和sysmmetric differenc
2023-01-31

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录