在实际的项目开发中,集合的运用可以说是多不胜数。不过Kotlin中的集合运用和Java中还是有很大的差别,他们两者之间,除了集合的类型相同以外,还包含集合的初始化的不同,以及Kotlin对于集合封装特别多的高阶函数以供我们能更简单、更快捷的编写代码。不过在讲解集合之前,我先会对Kotlin中的数组类型做出一个讲解,大家可以当做是对数组Array<T>的一个温故。
目录 一、数组类型在Kotlin数组类型不是集合中的一种,但是它又和集合有着太多相似的地方。并且数组和集合可以互换。并且在初始化集合的时候也可以传入一个数组。用于数组类型在前面的章节已经讲解过了,这里就不在多做累述。有兴趣的朋友可以去看我前面关于数据类型的文章。
Kotlin——初级篇(三):数据类型详解
这里只介绍几个常用的方法。其实在文章的后面,也对这些方法做出了讲解。
用arr[index]的获取元素。
用arr.component1() ... arr.component5()获取数组的前5个元素。同样适用与集合。
用arr.reverse()反转元素。
至于其他处理的元素,在文章的尾部都有说明。这也是我把数组类型与集合类型放在同一文章讲解的原因。
例1:使用componentX()函数
val arr = arrayOf("1",2,3,4) println(arr.component1()) println(arr.component3()) // 程序崩溃,因为元素只有4个,所以在不确定元素个数的情况,慎用这些函数,还是使用遍历安全些。 println(arr.component5())输出结果:
1 3例2 :反转元素
val arr = arrayOf("1",2,3,4) arr.reverse() // 文章后面会讲解forEach高阶函数。比for循环简洁多了 for (index in arr){ print("$index \t") }输出结果:
4 3 2 1 二、集合类型Kotlin中的集合和其他语言不同的是,Kotlin集合可分为可变和不可变集合。
在Kotlin中,集合类型包含三种类型:它们分别是:List、Set、Map,这三种类型都有几个共通点:
它们都是接口,并不是实际的类。
它们都继承至Collection<out E>接口,而Collection<out E>又继承与Iterable<out T>接口。它们几乎上只实现了isEmpty()、size属性、get()、contains()等方法。这一点和Java类似。
这三种集合类型分别有存在MutableList<E>、MutableSet<E>、MutableMap<K,V>接口,这些接口中提供了改变、操作集合的方法。例如add()、clear()、remove()等函数。
有以上三点我们可出,在定义集合类型变量的时候如果使用List<E>、Set<E>、Map<K,V>声明的时候该集合则是不可变集合,而使用MutableList<E>、MutableSet<E>、MutableMap<K,V>的时候该集合才是可变类型集合。这里我就不提供源码来分析了,有兴趣的可以看一看源码!源码在kotlin\collections\Collections.kt文件
下面对几个集合类型进行一一的讲解。
2.1、List类型我们知道,一个接口是不能直接实例化的,那我们要初始化一个怎么做呢?其实Kotlin给我们提供了相应的标准库函数去处理。
声明并初始化List
声明并初始化MutableList
例1:使用listOf()初始化不可变的List类型集合
val arr = arrayOf("1","2",3,4,5) val list1 = listOf(1,2,"3",4,"5") // 随意创建 val list2 = listOf<String>("1","2","3","4","5") // 确定元素的值类型 val list3 = listOf(arr) // 可传入一个数组 以下代码是错误的。因为List<E>只能是不可变集合。而add、remove、clear等函数时MutableList中的函数 list1.add() list1.remove ... // 遍历 for(value in list1){ print("$value \t") }输出结果:
1 2 3 4 5例2:使用mutableListOf()初始化不可变的List类型集合
val arr = arrayOf("1",2,3,4) val mutableList1 = mutableListOf(1,2,"3",4,"5") // 随意创建 val mutableList2 = mutableListOf<String>("1","2","3","4","5") // 确定元素的值类型 val mutableList3 = mutableListOf(arr) // 可传入一个数组 val mutableList : ArrayList<String> // 这里的ArrayList<>和Java里面的ArrayList一致 mutableList1.add("6") // 添加元素 mutableList1.add("7") mutableList1.remove(1) // 删除某一元素 // 遍历 for(value in mutableList1){ print("$value \t") } mutableList1.clear() // 清空集合输出结果为:
2 3 4 5 6 7 2.2、Set类型Set类型集合的使用和List类型集合大致相同。这里不做详细的介绍,只讲解它和List类型集合不同的地方。
声明并初始化Set
声明并初始化MutableSet