容器
Kotlin有3类基本的容器:集合Set、队列List、映射Map,每类容器又分为只读与可变2中类型,即有6种容器。
容器默认是只读容器
容器的公共方法
- isempty:判断该容器是否为空。
- isNotEmpty:判断该容器是否非空。
- clear:清空该容器。
- contains:判断该容器是否包含指定元素。
- count:获取该容器包含的元素个数,也可通过size属性获得元素数量。
- iterator:获取该容器的迭代器。
另外, Kotlin允许在声明容器变量时就进行初始赋值,如同对数组变量进行初始化那样。
以初始化List队列的例子:
var lists:List<String> = listOf("水星","金星","地球","图形")
注意:List是只读队列
Kotlin的容器 | 容器名称 | 容器的初始化方法 |
---|---|---|
只读集合 | Set | setOf |
可变集合 | MutableSet | mutableSetOf |
只读队列 | List | listOf |
可变队列 | MutableList | mutableListOf |
只读映射 | Map | mapOf |
可变映射 | MutableMap | mutableMapOf |
集合:Set/MutableSet
集合特性:
- 元素无序,不可以下标访问
- 元素唯一性,通过哈希值校验是否唯一,存在相同元素则覆盖
可变集合MutableSet特性:
- MutableSet不可以修改某个元素
- 集合时无序的,所有MutableSet的add、remove操作的都是元素,而不是某个位置
集合遍历
与Java一样,3中遍历方式
第一种方式:for-in循环,item代表元素
/**
* 使用for-in循环遍历集合
*/
fun setFor(){
btn_set_for.setOnClickListener {
var lists:List<String> = listOf("水星","金星","地球","图形")
var str = ""
var index = 0;
for(item in lists){
index ++;
str = "${str}${index} .${item}\n"
}
textShow.setText(str)
}
}
第二种方法:forEach循环,it代表元素
/**
* 使用forEach遍历集合
*/
fun setForEach(lists: List<String>) {
btn_set_Each.setOnClickListener {
var str = ""
var index = 0
lists.forEach {
index++
str = "${str}${index} .${it}\n"
}
textShow.setText(str)
}
}
第三种方法:迭代器,
通过hasNext()判断是否存在下一个节点
通过next()获取下一个节点,迭代器指向该元素地址
/**
* 使用迭代器遍历集合
*/
fun setIterator(lists: Set<String>){
btn_set_iterator.setOnClickListener {
var iterator = lists.iterator()
var str = ""
var index = 0
while (iterator.hasNext()){
index++
str = "${str}${index} .${it}\n"
}
textShow.setText(str)
}
}
注意:此种方式会无线循环,hasNext()返回的一直都是true
说明:方式1,2内部都是使用的iterator来遍历的;
队列:List/MutableList
队列特性:
- 元素之间按照顺序排列
- 队列能够通过get方法获取指定位置的元素,也可以直接通过下标获得该位置的元素。
- Mutablelist的add方法每次都是把元素添加到队列末尾,也可指定添加的位置
- Mutablelist的set方法允许替换或者修改指定位置的元素
- Mutablelist的 removeat方法允许删除指定位置的元素。
可变队列MutableList特性:
- 可排序,sort系列方法
/**
* 排序
*/
fun listSortBy(lists: MutableList<String>) {
btn_list_sortBy.setOnClickListener {
lists.sortedBy { it.length }
var str = ""
for (item in lists) {
str = "${str}${lists.indexOf(item) + 1} .${item}\n"
}
textShow.setText(str)
}
}
队列遍历
队列除了拥有跟集合一样的三种遍历方式(for-n循环、迭代器遍历、 for Each遍历)外,还多了一种按元素下标循环遍历的方式
/**
* 通过队列的下标数组遍历队列
*/
fun listIndex(lists: List<String>){
btn_list_index.setOnClickListener {
//indices是队列的下标数组
var str = ""
for(item in lists.indices){
str = "${str}${item + 1} .${lists.get(item)}\n"
}
textShow.setText(str)
}
}
映射Map/MutableMap
映射特性:
- 保存的是键值对
- 元素唯一,put时,判断key是否存在,存在则value覆盖
- 操作大多是针对key的
- 声明初始化方式不一样,采用的是Pair(键名,键值)
/**
* 映射的声明初始化和遍历
*/
fun map(){
btn_map.setOnClickListener {
var map :Map<String ,String > = mapOf(Pair("你好1","嗨,你好1"),Pair("你好2","嗨,你好2"))
var str = ""
for(it in map){
//it表示的到的是键值对
str = "${str}${it.key}--${it.value}\n"
}
textShow.setText(str)
}
}
说明:其遍历方式3中:for-in 、forEach、iterator三种,不同的是得到的it是键值对,通过it.key、it.value拿到键和值。
MutableMap 添加元素的方式:
/**
* 映射添加元素
*/
fun mapAddE(){
btn_mapAddE.setOnClickListener {
var map :MutableMap<String ,String > = mutableMapOf()
map.put("你好1","你好11")
map.put("你好2","你好22")
map.put("你好4","你好44")
map["你好11"] = "你好11111"
map["你好21"] = "你好22222"
map.set("你好12","你好1111111111")
map.set("你好23","你好2222222222")
var str = ""
for(it in map){
//it表示的到的是键值对
str = "${str}${it.key}--${it.value}\n"
}
textShow.setText(str)
}
}
put、set、[]都可以添加成功;set()调用的是put()
参考资料:《Kotlin从零到精通-Android开发》
Demo地址:https://github.com/sexyhair79/demokotlinBasics
网友评论