この記事は
core-ktx库的第三篇文章
、ライブラリ内のどのツールクラスまたはメソッドが開発効率を向上させることができるかを調査することを目的とした研究担当者です。
最初の2つの記事の参照リンクは次のとおりです。
公式のcore-ktxライブラリは、知っておく必要のある開発にどのような便利さをもたらすことができますか?
公式のcore-ktxライブラリは、リッチテキストスパンの開発にどのような利便性をもたらすことができますか?
この記事は主に、シリーズおよび開発コード
core-ktx
のライブラリの利便性を研究することを目的としています。!SparseArray
Pair
SparseArray
シリーズ
SparseArray
、 seriesは、データ構造の形式での読み取りと書き込みをサポートLongSparseArray
する一種のカプセル化クラスです。これと比較すると、次の2つの点があります。key-value
HashMap
- キー値
key
は基本データ型であり、基本データ型に対応するラッパークラスではありません。必要ありません。装箱
- そのデータ構造は、カプセル化に基づいて、読み取りと書き込みを行うのとは異なり、キー値の配列と値の
key
配列ですvalue
HashMap
Entry
key-value
PS:Android
SparseIntArray
には別の一連のコレクションがありますSparseBooleanArray
、、、SparseLongArray
これらのコレクションはより強力key和value都是基本数据类型
です、、ボクシングは必要ありません、上記のコレクションと混同しないでください。ただし、これら2つのコレクションによって提供される拡張パッケージcore-ktx
はほとんど同じであるため、個別に説明することはしません。
-
SparseArray<T>.size()
コレクションサイズを取得するこれは新しいことで
SparseArray
はなく、サイズを取得する元の方法をカプセル化したものsize()
です。kotlinの構文糖衣の助けを借りて、 ( )属性
と呼ぶことができます。本质上还是调用的方法
private fun test5() { val sparseArray: SparseArray<String> = SparseArray<String>() val size = sparseArray.size } 复制代码
-
SparseArray<T>.contains(key: Int)
判断には指定が含まれますkey
このメソッド
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到项目工具类库中使用即可。 -
SparseArray<T>.plus(other: SparseArray<T>)
并合并两个集合为一个新集合这也是一个运算符重载函数,重载了运算符
+
,项目中可以这样使用:private fun test5() { val sparseArray1: SparseArray<String> = SparseArray<String>() val sparseArray2: SparseArray<String> = SparseArray<String>() val newArray = sparseArray1 + sparseArray2 } 复制代码
-
SparseArray<T>.containsValue(value: T)
判断是否存在指定value
这个和上面的
contains
方法类似,不过这个是判断某个value值是否在该集合中,同样也是重载了运算符in
-
SparseArray<T>.set(key: Int, value: T)
写入数据重载了运算符
[]
的函数,可以这样向集合中写入数据:private fun test5() { val sparseArray1: SparseArray<String> = SparseArray<String>() sparseArray1[10] = "" } 复制代码
-
SparseArray<T>.getOrDefault(key: Int, defaultValue: T)
带默认值的读值这个方法和
HashMap
的getOrDefault()
类似,当获取的值为null时,就返回默认值:private fun test5() { val sparseArray1: SparseArray<String> = SparseArray<String>() sparseArray1.getOrDefault(10, "null") } 复制代码
-
SparseArray<T>.getOrElse(key: Int, defaultValue: () -> T)
带默认函数类型返回值的读值这个和上面的
getOrDefault()
比较像,只不过提供默认值的不再是一个固定的具体类型的值,而是一个灵活的函数类型,我们可以在这个函数类型中进行额外的逻辑编写:private fun test5() { val sparseArray1: SparseArray<String> = SparseArray<String>() sparseArray1.getOrElse(10) { val tmp = "哈哈哈${sparseArray1.size}" tmp } } 复制代码
-
SparseArray<T>.isEmpty()
判断集合是否为空的 -
SparseArray<T>.remove(key: Int, value: T)
移除指定key-value
-
SparseArray<T>.forEach(action: (key: Int, value: T) -> Unit)
遍历使用:
private fun test5() { val sparseArray1: SparseArray<String> = SparseArray<String>() sparseArray1.forEach { key, value -> //执行操作 } } 复制代码
-
SparseArray<T>.keyIterator()
遍历键值key
这个方法会返回一个迭代器,这样我们就可以使用
for in
来遍历键值key
了:private fun test5() { val sparseArray1: SparseArray<String> = SparseArray<String>() for (key in sparseArray1.keyIterator()) { //执行操作 } } 复制代码
自定义迭代器就可以帮助我们实现通过
for in
关键字遍历,具体的可以参考我之前写的一篇文章:你需要懂的Kotlin开发技巧之八#运算符重载for in
。 -
SparseArray<T>.valueIterator()
遍历value使用起来和上面的
keyIterator()
方法类似。
Pair<F, S>
系列
-
componentX()
解构这也是一个
operator
修饰的运算符重载函数,关于这个解构
,我不太该怎么去用语言来描述,大家直接看下使用吧:private fun test6() { val pair = Pair(10, "ha") val (key, value) = pair } 复制代码
就是可以直接将这个对象的内部属性赋值给局部声明的变量,如果你只使用key或value,可以将不想要解构的属性使用
_
代替:val (key , _) = pair //只使用key
この構造の拡張メソッドは、オブジェクト
Java
(androidおよびandroidXパッケージに含まれるものを含む)用に特別に提供されており、宣言されたオブジェクトは1つであるため、自分で実装する必要はありません。デフォルトで破壊メソッドが生成されます。 :Pair
Kotlin
Pair
Pair
data class
data class
Javaコードに逆コンパイルして、生成された
componentX()
一連のメソッドを確認します。 -
java
とkotlin
の間のPair
変換
-
toKotlinPair
オブジェクトをオブジェクトに変換しandroidx包
ますPair
Kotlin
Pair
-
toAndroidXPair
オブジェクトをオブジェクトに変換しkotlin
ますPair
androidx包
Pair
-
toKotlinPair
オブジェクトをオブジェクトに変換しandroid包
ますPair
Kotlin
Pair
-
toAndroidPair
オブジェクトをオブジェクトに変換しkotlin
ますPair
android包
Pair
要約する
詳細なソースコードについてはcore-ktx
、パッケージ内SparseArray.kt
のPair.kt
、、、SparseXXXArray.kt
などのファイルのソースコードを参照してください。core-ktx
次に、graphics
パッケージView
(多くの、多くのカテゴリ)の下で操作するためのいくつかの拡張ツールを研究する準備ができています:
それが私たちの共通のView
開発にどのような便利さをもたらすことができるかを見てください、お楽しみに!!
ナゲッツテクノロジーコミュニティのクリエイター署名プログラムの募集に参加しています。リンクをクリックして登録し、送信してください。