广告
返回顶部
首页 > 资讯 > 移动开发 >【Kotlin】集合操作总结 ( List 集合 | MutableList 集合 | List 集合遍历 | Set 集合 | MutableSet 集合 | Map 集合 | 可变 Map集合 )
  • 393
分享到

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

kotlinlistSetMapMutableList 2023-09-12 13:09:46 393人浏览 八月长安
摘要

文章目录 一、List 创建与元素获取二、安全获取集合元素1、getOrElse 函数2、getOrNull函数 三、List 创建与元素获取代码示例四、MutableList 可变列表集

文章目录





一、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 集合 中添加一些元素 , 可使用 += 运算符 :
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 集合遍历



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 通过解构一次性给多个元素赋值



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]




十一、数组类型



数组类型 :

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




十二、Map 集合



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

  • 使用 取值运算符 [] 获取 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 遍历



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




十五、可变 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

--结束END--

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

本文链接: https://www.lsjlt.com/news/404537.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作