Kotlin-android

Kotlin基础之容器

2018-04-22  本文已影响0人  sexyhair

容器

Kotlin有3类基本的容器:集合Set、队列List、映射Map,每类容器又分为只读与可变2中类型,即有6种容器。
容器默认是只读容器

容器的公共方法

另外, Kotlin允许在声明容器变量时就进行初始赋值,如同对数组变量进行初始化那样。

以初始化List队列的例子:

   var lists:List<String> = listOf("水星","金星","地球","图形")

注意:List是只读队列

Kotlin的容器 容器名称 容器的初始化方法
只读集合 Set setOf
可变集合 MutableSet mutableSetOf
只读队列 List listOf
可变队列 MutableList mutableListOf
只读映射 Map mapOf
可变映射 MutableMap mutableMapOf

集合:Set/MutableSet

集合特性:
可变集合MutableSet特性:
集合遍历

与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

队列特性:
可变队列MutableList特性:
/**
 * 排序
 */
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

映射特性:
/**
 * 映射的声明初始化和遍历
 */
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

上一篇下一篇

猜你喜欢

热点阅读