本文是研讨官方core-ktx库的第三篇文章,旨在探求该库中有哪些东西类或办法能够进步咱们的开发功率。

前两篇文章的参考链接如下:

你需求了解的官方core-ktx库kotlin为什么流行不起来能对开发带来哪些便当1

官方core-ktx库能对富文本Span开发带来哪些便当?

本篇文章主要是研讨core-ktx库对SparseArray系列和Pair开发能代码哪些便当!!

SparseArray系列

SparseArrayLongSparseArray系列便数据结构与算法是一种支撑key-value数据结构形式读写的变量名封装类,相比较于HashMap的有变量值点有两个:

官方core-ktx库能对SparseArray系列、Pair开发带来哪些便当?

  1. 键值key是一个根本数据类型,而不是一个根本数据类型对应的封装类,不需求装箱
  2. 它的数据结构是键值key一个数组,value值一个数组,不像HashMap,基于Entrykey-value进行封装再进行读写

PS:Android中还存在另一系列调集SparseIntArraySparseBooleanArraySparseLongArray,这些调集更厉害,key和value都是根本数据类型,不需求装变量泵箱,不要和上面的调集搞混了。不过这两种调集core-ktx供给的扩展封变量泵装都几乎相同,就效率计算公式不独自进数据结构行一一阐述了。

  1. SparseArray<T>.size()获取调集大小

    官方core-ktx库能对SparseArray系列、Pair开发带来哪些便当?

    这个没什么别致,便是对SparseArray原来获取大小的方式size()进行了一层封装,借助于kot数据结构c语言版第二版课后答案lin的语法糖,能够当成特点的形式调用(Android质上还是调用的办法):

    private fun test5() {
        val sparseArray: SparseArray<String> = SparseArray<String>()
        val size = sparseArray.size
    }
    
  2. SparseArray<T>.contains(key: Int)判别包含指定key

    官方core-ktx库能对SparseArray系列、Pair开发带来哪些便当?

    能够看到这个办法运用了operator润饰,是一变量与函数个运算符重载办法,重载了运算符in,运用如下:

    @RequiresApi(Build.VERSION_CODES.R)
    private fun test5() {
        val sparseArray: SparseArray<String> = SparseArray<String>()
        val isContain = 5 in sparseArray
    }
    

    不过这个api要求SDK>=30才能运用,咱们能够直接将源码copy到项目东西类库中运用即可。

  3. SparseArray<android平板电脑价格T>.plus(other: SparseArray<T>kotlin和java)并合kotlin语言并两个调集为一个新调集

    官方core-ktx库能对SparseArray系列、Pair开发带来哪些便当?

    这也是一个运算符重载函数,重载了运算符+,项目中能够这样运用:

    private fun test5() {
        val sparseArray1: SparseArray<String> = SparseArray<String>()
        val sparseArray2: SparseArray<String> = SparseArray<String>()
        val newArray = sparseArray1 + sparseArray2
    }
    
  4. SparseArray<T>.containsValue(value: T)判别是否存在指定value

    官方core-ktx库能对SparseArray系列、Pair开发带来哪些便当?

    这个和上面的contains办法相似,不过这个是判别某个value值是否在该调集中,相同也是重载了运算符in

  5. SparseArray<T>.set效率是什么意思(key: Int, value: T)写入数据

    官方core-ktx库能对SparseArray系列、Pair开发带来哪些便当?

    重载了运算符[]的函数,能够这样向调集中写入数据:

    private fun test5() {
        val sparseArray1: SparseArray<String> = SparseArray<String>()
        sparseArray1[10] = ""
    }
    
  6. SparseArray&l数据结构实验报告t;T>.变量值getOrDefault(key: Int, defaultValue: T)带默许值的读值

    官方core-ktx库能对SparseArray系列、Pair开发带来哪些便当?

    这个办法和HashMapgetOrDefault()相似androidstudio安装教程,当获取的值为null时数据结构,就回来默许值:

    private fun test5() {
        val sparseArray1: SparseArray<String> = SparseArray<String>()
        sparseArray1.getOrDefault(10, "null")
    }
    
  7. Sparse数据结构c语言版Array<T>.getOrElse(key: Int, defaultValue: () -> T)带默许函数kotlin为什么流行不起来类型回来值的读值

    官方core-ktx库能对SparseArray系列、Pair开发带来哪些便当?

    这个和上面的getOrDefault()比较像,只不过供给默许值的不再是一个固定的具体类型Kotlin的值,而是一个灵活的函数类型,咱们能够在这个函数类型变量是什么意思中进行额外的逻辑编写:

    private fun test5() {
        val sparseArray1: SparseArray<String> = SparseArray<String>()
        sparseArray1.getOrElse(10) {
            val tmp = "哈哈哈${sparseArray1.size}"
            tmp
        }
    } 
    
  8. SparseArray<kotlin为什么流行不起来T>.isEmpty()判别调集是否为空的

    官方core-ktx库能对SparseArray系列、Pair开发带来哪些便当?

  9. SparseAAndroidrray<T>androidstudio安装教程.remove(key: Int, value变量名的命名规则: T)移除指定key-value

    官方core-ktx库能对SparseArray系列、Pair开发带来哪些便当?

  10. SparseArray&l数据结构严蔚敏t;T>.forEach(action: (key: Int, value: T) -> Unit)遍历

    官方core-ktx库能对SparseArray系列、Pair开发带来哪些便当?

    运用:

    
    private fun test5() {
        val sparseArray1: SparseArray<String> = SparseArray<String>()
        sparseArray1.forEach { key, value ->
            //履行操作
        }
    }
    
  11. SparseArray<T>.kkotlin是什么eyIterator()遍历键值key

    官方core-ktx库能对SparseArray系列、Pair开发带来哪些便当?

    这个办法会回来一kotlin语言个迭代器,这样咱们就能够运用for in来遍历键值keykotlin是什么kotlin怎么读

    private fun test5() {
        val sparseArray1: SparseArray<String> = SparseArray<String>()
        for (key in sparseArray1.keyIterator()) {
            //履行操作
        }
    }
    

    自定义迭代器就能够协助咱们完成通过for in关键字遍历数据结构c语言版严蔚敏第二版答案,具体的能够参考我之前写的一篇文章:你需求懂的Kotlin开发技巧之八#运算符重载for in

  12. SparseArray<T>.valueIterator()遍历value

    官方core-ktx库能对SparseArray系列、Pair开发带来哪些便当?

    运用起来和上面的keyIterator()办法相似。

Pair<F, S>系列效率符号

  1. componentX()解构

    官方core-ktx库能对SparseArray系列、Pair开发带来哪些便当?

    这也是一个operator润饰的运算符重载函数,关于这个解构,我不太该怎么去用语言来描述,大家直接看下运用吧:

    private fun test6() {
        val pair = Pair(10, "ha")
        val (key, value) = pair
    }
    

    便是能够直接将这个目标的内部效率是什么意思特点赋值给部分声明的变量,如果你只运用key或value,能够将不想要解构的特点运用_替代:kotlin为什么流行不起来 val (key , _) = pair //只运用android是什么手机牌子key

    这个结构的扩展办法是专门给Java(包含android和androidX包下的)的Pair目标供给的,而Kotlin自己完成的Pair是不需求的,由于其声明的Pair目标便是一个data class,而data class会默许给咱们生成解构的办法:

    官方core-ktx库能对SparseArray系列、Pair开发带来哪些便当?

    反编译成java代码就能够看到生成的componentX()系列办法。

  2. javakotlinPair彼此转换

  • toKotlinPairandroidx包Pair目标转成KotlinPair效率是什么意思目标

    官方core-ktx库能对SparseArray系列、Pair开发带来哪些便当?

  • toAndroidXPairkotlinPair目标转成androidx包Pair目标

    官方core-ktx库能对SparseArray系列、Pair开发带来哪些便当?

  • toKotlinPairandroid包Pair目标转成KotlinPair目标

    官方core-ktx库能对SparseArray系列、Pair开发带来哪些便当?

  • toAndroidPairkotlinPair效率高发票查验目标转成a数据结构与算法ndroid包Pair目标

    官方core-ktx库能对SparseArray系列、Pair开发带来哪些便当?

总结

具体的源码请自行参考core-ktx包下的Sparse数据结构c语言版第二版课后答案Array.ktPair.k效率的英文tSparseXXXArray.kt等文件源码。接下来就准备研讨下core-ktxgraphics包下的关于Vi变量值ew操作的一些扩展东西了(好多好变量英语多类):

官方core-ktx库能对SparseArray系列、Pair开发带来哪些便当?

看下能为咱们常见的View开发带来哪些便当,请您敬请期待吧!!

我正在参加技能社区创作者签约计划招募活动,点击链接报名投稿。