文章详情

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

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-09-12 13:13

关注

文章目录





一、List 创建与元素获取



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 '。





三、List 创建与元素获取代码示例



代码示例 :

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

执行结果 :

TomUnKnownnull

在这里插入图片描述





四、MutableList 可变列表集合



使用 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 函数



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


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


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

mutableList += "Jack"

其效果等同于

mutableList.add("Jack")
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 集合遍历



List 集合遍历 :

    // 使用 for in 循环遍历    for (name in list) {        println("for : $name")    }
@kotlin.internal.HidesMemberspublic inline fun <T> Iterable<T>.forEach(action: (T) -> Unit): Unit {    for (element in this) action(element)}
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 通过解构一次性给多个元素赋值



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




八、Set 集合



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

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

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


代码示例 :

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

执行结果 :

Jerry




九、可变 Set 集合



调用 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 与 Set 之间相互转换



调用 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]




十一、数组类型



数组类型 :


代码示例 :

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)}




十二、Map 集合



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


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 值 :

public fun <K, V> Map<K, V>.getValue(key: K): V = getOrImplicitDefault(key)
public inline fun <K, V> Map<K, V>.getOrElse(key: K, defaultValue: () -> V): V = get(key) ?: defaultValue()
    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 遍历



Map 遍历方式 :

public inline fun <K, V> Map<out K, V>.forEach(action: (Map.Entry<K, V>) -> Unit): Unit {    for (element in this) action(element)}
    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




十五、可变 Map 集合



通过调用 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

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯