이 기사는
core-ktx库的第三篇文章
라이브러리의 어떤 도구 클래스 또는 메소드가 개발 효율성을 향상시킬 수 있는지 탐구하는 것을 목표로 하는 연구 관계자입니다.
처음 두 기사에 대한 참조 링크는 다음과 같습니다.
당신이 알아야 할 공식 core-ktx 라이브러리가 개발에 어떤 편의를 가져다 줄 수 있습니까?
공식 core-ktx 라이브러리가 서식 있는 텍스트 범위의 개발에 어떤 편리함을 가져다 줄 수 있습니까?
이 기사는 주로 시리즈 및 개발 코드 에
core-ktx
대한 라이브러리 의 편의성을 연구합니다! !SparseArray
Pair
SparseArray
시리즈
SparseArray
, 시리즈는 데이터 구조의 형태로 읽기와 쓰기를 지원LongSparseArray
하는 일종의 캡슐화 클래스이며 이에 비해 두 가지 점이 있습니다.key-value
HashMap
- 키 값
key
은 기본 데이터 유형이며 기본 데이터 유형에 해당하는 래퍼 클래스가 아니므로 필요 없음装箱
- 데이터 구조는 캡슐화 를 기반 으로 한 다음 읽기 및 쓰기를 기반으로 하는 것과 달리 키 값
key
의 배열과 값의 배열입니다.value
HashMap
Entry
key-value
추신: Android에는 또 다른 컬렉션 시리즈가 있습니다
SparseIntArray
. ,SparseBooleanArray
,SparseLongArray
이 컬렉션은 더 강력하고key和value都是基本数据类型
, 권투가 필요하지 않으며, 위의 컬렉션과 혼동하지 마십시오. 그러나 이 두 컬렉션에서 제공하는 확장 패키지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
는 operator 오버로딩 메서드이고 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 패키지 포함) 에 제공 되며 선언된 객체가 하나 이기 때문에 직접 구현할 필요가 없으며 기본적으로 구조화 메서드를 생성합니다. :Pair
Kotlin
Pair
Pair
data class
data class
componentX()
생성된 일련의 메소드 를 보려면 Java 코드로 디컴파일하십시오 . -
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
개발에 어떤 편리함을 가져다줄 수 있는지 살펴보십시오. 계속 지켜봐 주십시오! !
Nuggets Technology Community의 작성자 서명 프로그램 모집에 참여하고 있습니다. 링크를 클릭하여 등록하고 제출 하십시오.