美文网首页Kotlin-android
Kotlin基础之容器

Kotlin基础之容器

作者: sexyhair | 来源:发表于2018-04-22 16:20 被阅读0次

    容器

    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

    相关文章

      网友评论

        本文标题:Kotlin基础之容器

        本文链接:https://www.haomeiwen.com/subject/gwotlftx.html