Welchen Komfort kann die offizielle Core-ktx-Bibliothek für die Entwicklung der SparseArray-Serie und Pair bringen?

Dieser Artikel ist ein offizieller Forschungsartikel core-ktx库的第三篇文章, der untersuchen soll, welche Werkzeugklassen oder Methoden in der Bibliothek unsere Entwicklungseffizienz verbessern können.

Die Referenzlinks für die ersten beiden Artikel lauten wie folgt:

Welche Annehmlichkeiten kann die offizielle Core-ktx-Bibliothek für die Entwicklung bringen, die Sie wissen müssen?

Welchen Komfort kann die offizielle Core-ktx-Bibliothek für die Entwicklung von Rich-Text-Spans bringen?

Dieser Artikel dient hauptsächlich dazu, die Bequemlichkeit core-ktxder Bibliothek für SparseArraySerien- und PairEntwicklungscode zu untersuchen! !

SparseArraySerie

SparseArray, LongSparseArrayseries ist eine Art key-valueKapselungsklasse, die das Lesen und Schreiben in Form von Datenstrukturen unterstützt.Im Vergleich HashMapdazu gibt es zwei Punkte:

Bild.png

  1. Der Schlüsselwert keyist ein grundlegender Datentyp, keine Wrapper-Klasse, die dem grundlegenden Datentyp entspricht, keine Notwendigkeit装箱
  2. Seine Datenstruktur ist ein Array von Schlüsselwerten keyund ein Array von valueWerten, im Gegensatz zu HashMap, basierend Entryauf key-valueKapselung und dann Lesen und Schreiben

PS: Es gibt eine andere Reihe von Sammlungen in Android SparseIntArray, SparseBooleanArray, SparseLongArray, diese Sammlungen sind leistungsfähiger, key和value都是基本数据类型brauchen kein Boxen, verwechseln Sie sie nicht mit den oben genannten Sammlungen. Die von diesen beiden Sammlungen bereitgestellten Erweiterungspakete core-ktxsind jedoch fast gleich, sodass sie nicht einzeln erläutert werden.

  1. SparseArray<T>.size()Sammlungsgröße erhalten

    Bild.png

    Das ist nichts Neues, es kapselt nur die SparseArrayursprüngliche Art, die Größe zu erhalten size(). Mit Hilfe von kotlins syntaktischem Zucker kann es 属性aufgerufen werden als ( 本质上还是调用的方法):

    private fun test5() {
        val sparseArray: SparseArray<String> = SparseArray<String>()
        val size = sparseArray.size
    }
    复制代码
  2. SparseArray<T>.contains(key: Int)Das Urteil beinhaltet die Spezifizierungkey

    Bild.png

    Sie können sehen, dass diese Methode operatordekoriert ist, es ist eine Operatorüberladungsmethode, die den Operator überlädt in, verwenden Sie Folgendes:

    @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<T>.plus(other: SparseArray<T>)并合并两个集合为一个新集合

    Bild.png

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

    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

    Bild.png

    这个和上面的contains方法类似,不过这个是判断某个value值是否在该集合中,同样也是重载了运算符in

  5. SparseArray<T>.set(key: Int, value: T)写入数据

    Bild.png

    重载了运算符[]的函数,可以这样向集合中写入数据:

    private fun test5() {
        val sparseArray1: SparseArray<String> = SparseArray<String>()
        sparseArray1[10] = ""
    }
    复制代码
  6. SparseArray<T>.getOrDefault(key: Int, defaultValue: T)带默认值的读值

    Bild.png

    这个方法和HashMapgetOrDefault()类似,当获取的值为null时,就返回默认值:

    private fun test5() {
        val sparseArray1: SparseArray<String> = SparseArray<String>()
        sparseArray1.getOrDefault(10, "null")
    }
    复制代码
  7. SparseArray<T>.getOrElse(key: Int, defaultValue: () -> T)带默认函数类型返回值的读值

    Bild.png

    这个和上面的getOrDefault()比较像,只不过提供默认值的不再是一个固定的具体类型的值,而是一个灵活的函数类型,我们可以在这个函数类型中进行额外的逻辑编写:

    private fun test5() {
        val sparseArray1: SparseArray<String> = SparseArray<String>()
        sparseArray1.getOrElse(10) {
            val tmp = "哈哈哈${sparseArray1.size}"
            tmp
        }
    } 
    复制代码
  8. SparseArray<T>.isEmpty()判断集合是否为空的

    Bild.png

  9. SparseArray<T>.remove(key: Int, value: T)移除指定key-value

    Bild.png

  10. SparseArray<T>.forEach(action: (key: Int, value: T) -> Unit)遍历

    Bild.png

    使用:

    
    private fun test5() {
        val sparseArray1: SparseArray<String> = SparseArray<String>()
        sparseArray1.forEach { key, value ->
            //执行操作
        }
    }
    复制代码
  11. SparseArray<T>.keyIterator()遍历键值key

    Bild.png

    这个方法会返回一个迭代器,这样我们就可以使用for in来遍历键值key了:

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

    自定义迭代器就可以帮助我们实现通过for in关键字遍历,具体的可以参考我之前写的一篇文章:你需要懂的Kotlin开发技巧之八#运算符重载for in

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

    Bild.png

    使用起来和上面的keyIterator()方法类似。

Pair<F, S>系列

  1. componentX()解构

    Bild.png

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

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

    就是可以直接将这个对象的内部属性赋值给局部声明的变量,如果你只使用key或value,可以将不想要解构的属性使用_代替: val (key , _) = pair //只使用key

    Die Erweiterungsmethode dieser Struktur wird speziell für Objekte Java(einschließlich derjenigen unter den Paketen android und androidX) bereitgestellt , und es ist nicht erforderlich , sie selbst zu implementieren , da das deklarierte Objekt one ist und standardmäßig eine Destrukturierungsmethode für uns generiert :PairKotlinPairPairdata classdata class

    Bild.png

    In Java-Code dekompilieren, um die generierte componentX()Reihe von Methoden anzuzeigen.

  2. javaKonvertierung zu und kotlinvonPair

  • toKotlinPairWandeln Sie androidx包das PairObjekt in Kotlindas PairObjekt um

    Bild.png

  • toAndroidXPairWandeln Sie kotlindas PairObjekt in androidx包das PairObjekt um

    Bild.png

  • toKotlinPairWandeln Sie android包das PairObjekt in Kotlindas PairObjekt um

    Bild.png

  • toAndroidPairWandeln Sie kotlindas PairObjekt in android包das PairObjekt um

    Bild.png

Zusammenfassen

Den detaillierten Quellcode finden Sie im Quellcode von Dateien wie , , , usw. core-ktxunter dem Paket . Als nächstes bin ich bereit, einige Erweiterungstools für Operationen unter dem Paket zu studieren (viele, viele Kategorien):SparseArray.ktPair.ktSparseXXXArray.ktcore-ktxgraphicsView

Bild.png
Werfen Sie einen Blick darauf, welchen Komfort es für unsere gemeinsame ViewEntwicklung bringen kann, bitte bleiben Sie dran! !

Ich nehme an der Rekrutierung des Signierprogramms für Ersteller der Nuggets Technology Community teil. Klicken Sie auf den Link, um sich zu registrieren und einzureichen .

Ich denke du magst

Origin juejin.im/post/7118765812105609230
Empfohlen
Rangfolge