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天前
如何实现数组和 List 之间的转换?
如何实现数组和 List 之间的转换?
|
2天前
|
存储 JavaScript
ES6+新特性-Symbol与Set/Map数据结构
ES6 引入了三种新的数据结构:Symbol、Set和Map。Symbol是唯一且不可变的值,常用于定义对象的独特属性;Set存储不重复值,适合数组去重;Map则是键值对集合,键可为任意类型,提供了更灵活的存储方式。这些新数据结构提供了更高效的操作手段,分别解决了属性命名冲突、数据去重和复杂键值对存储的问题。示例展示了如何使用Symbol、Set和Map进行基本操作。
|
2天前
|
存储 安全 Java
Java一分钟之-集合框架进阶:Set接口与HashSet
【5月更文挑战第10天】本文介绍了Java集合框架中的`Set`接口和`HashSet`类。`Set`接口继承自`Collection`,特征是不允许重复元素,顺序不确定。`HashSet`是`Set`的实现,基于哈希表,提供快速添加、删除和查找操作,但无序且非线程安全。文章讨论了`HashSet`的特性、常见问题(如元素比较规则、非唯一性和线程安全性)以及如何避免这些问题,并提供了代码示例展示基本操作和自定义对象的使用。理解这些概念和注意事项能提升代码效率和可维护性。
12 0
|
2天前
|
存储 安全 算法
Java一分钟之-Java集合框架入门:List接口与ArrayList
【5月更文挑战第10天】本文介绍了Java集合框架中的`List`接口和`ArrayList`实现类。`List`是有序集合,支持元素重复并能按索引访问。核心方法包括添加、删除、获取和设置元素。`ArrayList`基于动态数组,提供高效随机访问和自动扩容,但非线程安全。文章讨论了三个常见问题:索引越界、遍历时修改集合和并发修改,并给出避免策略。通过示例代码展示了基本操作和安全遍历删除。理解并正确使用`List`和`ArrayList`能提升程序效率和稳定性。
8 0
|
2天前
|
存储 安全 Java
Java容器类List、ArrayList、Vector及map、HashTable、HashMap
Java容器类List、ArrayList、Vector及map、HashTable、HashMap
|
2天前
|
存储 编译器 C++
C++:map&set 对红黑树的封装
C++:map&set 对红黑树的封装
10 1
|
2天前
|
存储
Map与Set的经典OJ题
Map与Set的经典OJ题
12 3
|
2天前
|
存储 自然语言处理 容器
Map与Set
Map与Set
12 3
|
2天前
|
存储 C++ 容器
C++:STL - set & map
C++:STL - set & map
15 4
|
2天前
|
JSON 数据格式
使用 Gson 将 Map、List等转换为json string
使用 Gson 将 Map、List等转换为json string
13 0