一、容器
Kotlin号称全面兼容Java,于是Java的容器类仍可在Kotlin中正常使用,包括大家熟悉的队列ArrayList、映射HashMap等。不过Kotlin作为一门全新的语言,肯定有自己的容器类,不然哪天Java跟Kotlin分清界限,那就麻烦大了。下面主要对Kotlin容器进行详细说明。
1.容器的基本操作
与Java类似,Kotlin也拥有三类基本的容器,分别是集合Set、队列List、映射Map,然后每类容器又分作只读与可变两种类型,这是为了判断该容器能否进行增、删、改等变更操作。Kotlin对变量的修改操作很慎重,每个变量在定义的时候就必须指定能否修改,比如添加val修饰表示该变量不可修改,添加var修饰表示该变量允许修改。至于容器则默认为只读容器,如果需要允许修改该容器变量,就需要加上Mulable前缀形成新的容器,比如MutableSet表示可变集合,MutableList表示可变队列,MutableMap表示可变映射。只有可变的容器才能够对其内部元素进行增、删、改操作。
既然集合Set、队列List、映射Map三者都属于容器,那么它们必定拥有相同的容器方法,这些公共方法具体说明如下:
isEmpty : 判断该容器是否为空
isNotEmpty:判断该容器是否非空
clear:清空该容器
contains:判断该容器是否包含指定元素
iterator:获取容器的迭代器
count:获取该容器包含元素个数,也可以通过size属性获得元素数量
下面是一个初始化List队列的Kotlin代码例子:
val satellLites:List<String> = listOf(“水星” ,”火星” ,”木星” ,”天王星” ,'”土星”)
当然,不同的容器初始化方法有所区别,下列是各种容器的初始化方法
Kotlin的容器 | 容器名称 | 容器的初始化方法 |
只读集合 | Set | setOf |
可变集合 | MutableSet | mutableSetOf |
只读队列 | List | listOf |
可变队列 | MutableList | mutableListOf |
只读映射 | Map | mapOf |
可变映射 | MutableMap | mutableMapOf |
2.集合Set/MutableSet
集合是一种最简单的容器,它具有一下特性:
(1)容器内部的元素不按顺序排列,因此无法按照下标进行访问。
(2)容器内部的元素存在唯一性,通过哈希值效验是否存在相同的元素,若存在,则将其覆盖。
因为Set是只读集合,初始化赋值后便不可更改,所以元素变更的方法只适应与可变集合MutableSet,但MutableSet的可变更操作有一下限制:
(1)MutableSet的add方法仅仅往集合中添加元素,由于集合无序,因此不知道添加的具体位置
(2)MutableSet没有修改元素值的方法,一个元素一旦添加,就不可被修改
(3)MutableSet的remove方法用于删除指定元素,但无法删除某个位置的元素,这是因为集合内的元素不是按顺序排列的
3.for – in 循环
与Java类似,通过for语句加上in条件,即可轻轻松松依次取出集合中的所有元素,下面是运用for-in循环的代码例子:
val satellLites:Set<String> = setOf(“水星” ,”火星” ,”木星” ,”天王星” ,'”土星”)
btn_set_for.setOnClickListener{
var desc = “”
//使用for-in语句循环取出集合中每条记录
for (item in satellLites){
desc = “${desc}名称:${item}\n”
}
}
输出:名称:水星
名称:火星
名称:木星
名称:天王星
名称:土星
4.迭代器遍历
val satellLites:Set<String> = setOf(“水星” ,”火星” ,”木星” ,”天王星” ,'”土星”)
btn_set_for.setOnClickListener{
var desc = “”
val iterator = satellLites.iterator()
while(iterator.hasNext()){
val item = iterator.next()
desc = “${desc}名称:${item}\n”
}
}
输出:名称:水星
名称:火星
名称:木星
名称:天王星
名称:土星
5.forEach遍历
val satellLites:Set<String> = setOf(“水星” ,”火星” ,”木星” ,”天王星” ,'”土星”)
btn_set_for.setOnClickListener{
var desc = “”
satellLites.forEach{
desc = “${desc}名称:${it}\n”
}
}
输出:名称:水星
名称:火星
名称:木星
名称:天王星
名称:土星
注:结合以上有关Set/NUtableSet的用法说明,可以发现集合在实战中存在诸多不足,主要包括一下几点:
(1)集合不允许修改内部元素的值
(2)集合无法删除指定位置的元素
(3)不能通过下标获取指定位置的元素
同理队列List/MutableList用法相似不同点是:
(1)队列再添加元素时,会把元素添加到队列末尾
(2)队列可以根据set、get方法来替换、修改或获取某个指定位置的元素
(3)可以调用removeAt方法,删除指定位置的元素
(4)for-in循环、迭代器遍历、forEach遍历使用方法同上
同理映射Mapt/MutableMap用法相似不同点是:
(1)映射数据存储是按键值对方式存储的,当通过put方法添加元素时,映射会根据键名寻找相同元素,如果找到则替换,如果没找到则是添加
(2)remove方法是通过键名来删除数据的
(3)for-in循环、迭代器遍历、forEach遍历使用方法同上
小结:
通过本章的学习,读者应能掌握一下技能
(1)学会Kotlin对基本数据类型的变量定义以及变量之间的类型转换
(2)学会Kotlin对基本类型数组的声明方式以及数组变量的常见用法
(3)学会Kotlin对字符串的各种处理操作以及字符串模板的书写格式
(4)学会Kotlin对容器的声明方式以及增、删、改、查操作,包含集合、队列、映射三种基本容器
最后是交流公众号,大家可以关注一下
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/119181.html