Kotlin 中List集合,Set集合,Map集合,数组的详解

简介: Kotlin 中List集合,Set集合,Map集合,数组的详解

1、创建不可变List集合

fun main() {
    val list = listOf("Jason", "Jack", "Jacky")
    println(list[2])
    //getOrElse是一个安全索引取值函数,它需要两个参数
    //第一个是索引值,第二个是能提供默认值的lambda表达式,如果索引值不存在的话,可用来代替异常
    println(list.getOrElse(3) { "UnKnown" })
    //getOrNull是kotlin提供的另一个安全索引取值函数,它返回null结果,而不是抛异常
    println(list.getOrNull(3) ?: "UnKnown")
}

输出结果

Jacky
UnKnown
UnKnown

2、创建可变的List集合

fun main() {
    //可变的list集合
    val list = mutableListOf("Jason", "Jack", "Jacky")
    list.add("Jimmy")
    list.remove("Jack")
    println(list)
    //mutator函数:能修改可变列表的函数有个统一的名字(mutator函数)
    //运算符重载:普通的符号,通过运算符重载技术,让其具备特定的功能
    list += "Android"
    println(list)
    list -= "Jason"
    println(list)
    //包含Jack的字符,就把包含Jack字符的元素删除掉
    list.removeIf {
        it.contains("Jack")
    }
    println(list)
    list.remove("Jack")
    println(list)
    //不可变list集合,转为可变list集合
    var toMutableList = listOf("Jason", "Jack", "Jacky").toMutableList()
    toMutableList.add("1")
    println(toMutableList)
    //可变list集合,转为不可变list集合
    val toList = mutableListOf("Jason", "Jack", "Jacky").toList()
    println(toList)
    val listOf = listOf(1, 2, 15, 90)
    println(listOf)
}

输出结果

[Jason, Jacky, Jimmy]
[Jason, Jacky, Jimmy, Android]
[Jacky, Jimmy, Android]
[Jimmy, Android]
[Jimmy, Android]
[Jason, Jack, Jacky, 1]
[Jason, Jack, Jacky]
[1, 2, 15, 90]

3、创建不可变Set集合和可变Set集合,以及List集合和Set集合之间的转换函数:distinct

fun main() {
//    var set = setOf("Jason", "Jack", "Jacky", "Jack")
    //使用elementAt函数读取集合中的元素
//    println(set.elementAt(0))
//    println(set.elementAt(1))
//    println(set.elementAt(2))
    val mutableSetOf = mutableSetOf("Jason", "Jack1", "Jacky", "Jack")
//    mutableSetOf += "Jimmy"
//    mutableSetOf -= "Jack"
//    for (i in mutableSetOf) {
//        println(i)
//    }
//    mutableSetOf.forEach {
//        print("$it ")
//    }
    for (i in mutableSetOf.indices) {
        print(mutableSetOf.elementAt(i) + " ")
    }
    println()
    println("****************************")
    val set = setOf<String>("Jason", "test", "hello", ".net")
    for (index in set.indices) {
        print(set.elementAt(index) + " ")
    }
//    for (i in set) {
//        println(i)
//    }
//    set.forEach {
//        println(it)
//    }
//    println(mutableSetOf.elementAt(2))
    println()
    //集合转换
    //把List集合转换成Set,去掉重复元素
    val list = listOf("Jason", "Jack", "Jacky", "Jack")
        .toSet()
        .toList()
    println(list)
    //distinct;List集合转Set集合,去重的一个快捷函数
    println(listOf("Jason", "Jack", "Jacky", "Jack").distinct())
}

输出结果

Jason Jack1 Jacky Jack 
****************************
Jason test hello .net 
[Jason, Jack, Jacky]
[Jason, Jack, Jacky]

4、数组类型

代码如下:

fun main() {
    val intArray = intArrayOf(10, 30, 20)
    //得到的int类型的数组
    var toIntArray = listOf(10, 30, 40).toIntArray()
    println(toIntArray[0])
    var arrayOf = arrayOf(File("xxx"), File("yyy"))
    println(arrayOf[0])
}

输出结果

10
xxx

5、创建不可变Map集合

fun main() {
    //to 是省略了点号和参数的特殊参数,to函数将它左边和右边的值转化为一对Pair
    var map = mapOf("jack" to 20, "hello" to 15, "test" to 10)
//    mapOf(Pair("jimmy", 20))
    println(map["jack"]) //[]取值运算符,读取键对应的值,如果键不存在就返回null
    println(map["hh"]) //null
    println(map.getValue("hello")) //读取键对应的值,如果键不存在就抛出异常
    println(map.getOrElse("test1") { "Unknown" }) //读取键对应的值,或者使用匿名函数返回默认值
    println(map.getOrDefault("rose", 0))//读取键对应的值,或者返回默认值
    /**
     * forEach遍历Map
     */
    map.forEach {
        println("${it.key},${it.value}")
    }
    map.forEach { (key: String, value: Int) ->
        println("$key,$value")
    }
}

输出结果如下:

20
null
15
Unknown
0
jack,20
hello,15
test,10
jack,20
hello,15
test,10

6、创建可变Map集合

fun main() {
    var mutableMapOf = mutableMapOf("jack" to 20, "hello" to 15, "test" to 10)
    mutableMapOf += "Jimmy" to 30
    mutableMapOf.put("Jimmy", 100)
    mutableMapOf.getOrPut("Rose") { 18 }
    println(mutableMapOf)
}

输出结果如下:

{jack=20, hello=15, test=10, Jimmy=100, Rose=18}


目录
相关文章
|
2月前
|
存储 NoSQL 关系型数据库
Redis 集合(Set)
10月更文挑战第17天
40 5
|
8天前
|
算法
你对Collection中Set、List、Map理解?
你对Collection中Set、List、Map理解?
41 18
你对Collection中Set、List、Map理解?
|
1天前
|
存储 缓存 安全
只会“有序无序”?面试官嫌弃的List、Set、Map回答!
小米,一位热衷于技术分享的程序员,通过与朋友小林的对话,详细解析了Java面试中常见的List、Set、Map三者之间的区别,不仅涵盖了它们的基本特性,还深入探讨了各自的实现原理及应用场景,帮助面试者更好地准备相关问题。
34 20
|
23天前
set集合
HashSet(无序,唯一): 基于 HashMap 实现的,底层采用 HashMap 来保存元素。 LinkedHashSet: LinkedHashSet 是 HashSet 的子类,并且其内部是通过 LinkedHashMap 来实现的。 TreeSet(有序,唯一): 红黑树(自平衡的排序二叉树)。
|
1月前
|
存储 Java
判断一个元素是否在 Java 中的 Set 集合中
【10月更文挑战第30天】使用`contains()`方法可以方便快捷地判断一个元素是否在Java中的`Set`集合中,但对于自定义对象,需要注意重写`equals()`方法以确保正确的判断结果,同时根据具体的性能需求选择合适的`Set`实现类。
|
1月前
|
存储 Java 开发者
在 Java 中,如何遍历一个 Set 集合?
【10月更文挑战第30天】开发者可以根据具体的需求和代码风格选择合适的遍历方式。增强for循环简洁直观,适用于大多数简单的遍历场景;迭代器则更加灵活,可在遍历过程中进行更多复杂的操作;而Lambda表达式和`forEach`方法则提供了一种更简洁的函数式编程风格的遍历方式。
|
1月前
|
Java 开发者
|
1月前
|
算法 JavaScript 前端开发
使用 Set 类型实现数组的交集运算
【10月更文挑战第30天】使用 `Set` 类型实现数组的交集运算是一种常见且有效的方法,它为我们处理数据集合的运算提供了一种便捷的途径。通过合理地运用这种方法,我们可以轻松地实现数组的交集计算,并在各种编程任务中灵活运用。
|
2月前
|
JSON 调度 数据库
Android面试之5个Kotlin深度面试题:协程、密封类和高阶函数
本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点。文章详细解析了Kotlin中的协程、扩展函数、高阶函数、密封类及`inline`和`reified`关键字在Android开发中的应用,帮助读者更好地理解和使用这些特性。
30 1
|
3月前
|
Android开发 开发者 Kotlin
告别AsyncTask:一招教你用Kotlin协程重构Android应用,流畅度飙升的秘密武器
【9月更文挑战第13天】随着Android应用复杂度的增加,有效管理异步任务成为关键。Kotlin协程提供了一种优雅的并发操作处理方式,使异步编程更简单直观。本文通过具体示例介绍如何使用Kotlin协程优化Android应用性能,包括网络数据加载和UI更新。首先需在`build.gradle`中添加coroutines依赖。接着,通过定义挂起函数执行网络请求,并在`ViewModel`中使用`viewModelScope`启动协程,结合`Dispatchers.Main`更新UI,避免内存泄漏。使用协程不仅简化代码,还提升了程序健壮性。
92 1