内容简介:前文介绍了数据类型相关的文章,本讲我们来聊聊 Kotlin 中的集合。
简介
Kotlin 完全兼容 Java 的集合,且 Kotlin 有专有的集合:可变集合&不可变集合(本质还是 Java 的集合,后面讲到的类的映射大家就明白啦)。
不可变集合:集合在创建的时候,就知道元素的个数与内容。创建后不可以新增元素。
fun main() {
/**
* Kotlin 不可变集合
* 都不带有 add 方法和 remove 方法
*
* 其实不可变的集合,就是给编译器看的.编译器不让你写 remove 方法,最终编译的 class 文件都映射成了 Java 的集合
* Java 调用 Kotlin 的不可变集合,是可以调用到 remove 和 add 方法的
*/
val listOf = listOf<
String>("1"
, "2",
"3")
val setof = setOf<
String>("1"
, "2",
"3")
val map = mapOf<
String, Int
>(Pair(
"1", 1
), Pair(
"2", 2
))
/**
* 注意:
* 为啥可以用 to 连接呢?(后续讲到神奇的中缀符号,类似自定义操作符)
*/
val mapof = mapOf(
"1" to 1
, "2" to
3)
}
补充一点:Kotlin 的不可变集合,在定义的时候就固定了元素个数与内容。这个限定范围只在 Kotlin 语言范围中(编辑器限制)。若 Java 调用 Kotlin 中的不可变集合,就会打破这个限制。(本质还是 Java 的集合)
可变结合:创建后可以新增元素。
fun main() {
/**
* Kotlin 中的可变集合
* 最终也是映射成 Java 的集合
*/
val list = mutableListOf<String>("1", "2", "3")
val mutableMapOf = mutableMapOf(1 to 2, 2 to 3)
val mutableSetOf = mutableSetOf(1 , 3)
/**
* 当然 Kotlin 也可以直接使用 Java 的集合定义
*/
val javaList = ArrayList<String>()
val javaMap = HashMap<String, Int>()
val javaSet = HashSet<String>()
}
Kotlin 集合方法的封装
Kotlin 为我们扩展了好多方便操作集合方法,我们来看看常用的几个吧。
List 集合
取值:可直接通过索引获取
fun main() {
val javaList = ArrayList<String>()
/**
* 直接通过索引访问
*/
val s = javaList[0]
}
取区间:还记得 Kotlin 特有的区间吗?当我们想从 list 集合中取一个区间范围的时候,使用 slice 方法即可。
fun main() {
val javaList =
ArrayList<String
>()
/**
* 取区间,当然也可以使用半开区间 until
*/
val result = javaList.slice(
0..2
)
}
List集合直接相加减:Kotlin List 集合可以运算啦!!! (大伙考虑下,怎么实现的呢?)
操作 | 解释 |
---|---|
list1 + list2 | 最终结果,合并2个集合 |
list1 - list2 | 最终结果,list1 于 list2 的差集 |
/**
* 2个集合相加,得到第三个集合.
* 2个集合相减,左边的集合删除右边集合中存在的元素
*/
fun main() {
/**
* 这里我特意创建了2个不同类型的集合
*/
val list = mutableListOf<String>("1", "2", "3")
val javaList = ArrayList<String>()
/**
* 1个是 mutableList 一个是 ArrayList
* 发现还可以相加,充分证明了,他俩有不可拆分的联系
*/
val listAdd = list + javaList
}
遍历丶转换丶过滤:Kotlin 提供了很多类似 RxJava 的操作符。
fun main() {
val javaList = ArrayList<String>()
/**
* 数据转换
*/
javaList.map {
}
/**
* 过滤
*/
javaList.filter {
}
/**
* flatMap转换
*/
javaList.flatMap {
}
/**
* 遍历
*/
javaList.forEach {
}
/**
* 索引+值遍历
*/
javaList.forEachIndexed { index, s ->
}
}
删除元素:Kotlin 的 remove 方法是删除指定元素,removeAt 是按照索引删除,removeIf 可以条件删除。
fun main() {
val list= mutableListOf<String>()
/**
* 对象删除
*/
list.remove("")
/**
* 索引删除
*/
list.removeAt(0)
/**
* 条件删除
*/
list.removeIf {
}
}
Map 集合
Map 集合在 Java 中是经常使用的集合。但是我不得不吐糟 Java 中 Map 集合遍历很恶心。Kotlin 做了很大的改变,接下来我们来瞧一瞧。
增加元素:增加元素可以直接使用 [],类似数组赋值的语法增加(取 key 的值,也支持此语法)。
fun main() {
/**
* 创建可变 Map 并增加 2 个元素
* 注意: 这里的增加元素是通过 key to value 的形式,后面会讲解这个 to 的原理
*/
val mutableMap = mutableMapOf<String, Int>("阿文" to 18, "小丽" to 18)
/**
* 新的增加元素方式,增加 key=阿花 value=12 的一个元素
*/
mutableMap["阿花"] = 12
}
删除元素
fun main() {
val mutableMap = mutableMapOf<String, Int>("阿文" to 18, "小丽" to 18)
mutableMap.remove("阿文")
}
遍历丶转换丶过滤
fun main() {
val mutableMap = mutableMapOf<String, Int>("阿文" to 18, "小丽" to 18)
/**
* map 转换
*/
mutableMap.map {
}
/**
* 过滤
*/
mutableMap.filter {
}
/**
* 遍历
*/
mutableMap.forEach { key, value ->
}
/**
* in 遍历
*/
for (mutableEntry in mutableMap) {
}
/**
* 这种形式的遍历和上面的 in 遍历方式是一致的
* 为何可以这样写?后面讲到重载操作符会补充这里
*/
for ((value, key) in mutableMap) {
}
}
总结
Kotlin 为集合提供了很多强大的辅助方法,实现原理都很简单。(都是对集合进行封装。其实这些功能全都归功于 Koltin 的扩展函数。期待我们的下一篇文章吧!)。
参考内容:
- Reference - Kotlin 语言中文站 https://www.kotlincn.net/docs/reference/
推荐阅读
--END--
识别二维码,关注我们