Collection
最近更新时间 | 稳定版 | 候选版本 | Beta 版 | Alpha 版 |
---|---|---|---|---|
2022 年 7 月 27 日 | 1.2.0 | - | - | 1.3.0-alpha02 |
声明依赖项
如需添加 Collection 的依赖项,您必须将 Google Maven 代码库添加到项目中。如需了解详情,请参阅 Google 的 Maven 代码库。
在应用或模块的 build.gradle
文件中添加所需工件的依赖项:
Groovy
dependencies { def collection_version = "1.2.0" // Java language implementation implementation "androidx.collection:collection:$collection_version" // Kotlin implementation "androidx.collection:collection-ktx:$collection_version" }
Kotlin
dependencies { val collection_version = "1.2.0" // Java language implementation implementation("androidx.collection:collection:$collection_version") // Kotlin implementation("androidx.collection:collection-ktx:$collection_version") }
如需详细了解依赖项,请参阅添加 build 依赖项。
反馈
您的反馈将帮助我们改进 Jetpack。如果您发现了新问题,或对此库的改进有自己的见解,请告诉我们。创建新问题前,请先查看此库中的现有问题。您可以点击星标按钮,为现有问题投票。
如需了解详情,请参阅问题跟踪器文档。
版本 1.3.0
版本 1.3.0-alpha02
2022 年 7 月 27 日
发布了 androidx.collection:collection:1.3.0-alpha02
和 androidx.collection:collection-ktx:1.3.0-alpha02
。版本 1.3.0-alpha02 中包含这些提交内容。
API 变更
- 在通用工件中,
SparseArrayCompat
现已可用于非 JVM 平台(Ic9bd0、b/219589118、b/228347315) - 在通用工件中,
CircularIntArray
现已可用于非 JVM 平台(I3d8ef、b/228344943) - 在通用工件中,
LongSparseArray
现已可用于非 JVM 平台(I73149、b/228347315)
版本 1.3.0-alpha01
2022 年 6 月 29 日
发布了 androidx.collection:collection:1.3.0-alpha01
和 androidx.collection:collection-ktx:1.3.0-alpha01
。版本 1.3.0-alpha01 中包含这些提交内容。
新功能
collection-ktx
扩展项已迁移到主集合工件androidx.collection:collection
中。此变更使 Kotlin 用户无需借助 -ktx 依赖项即可使用现有的 -ktx 扩展项,同时仍针对现有用户保持兼容性。在单独的 -ktx 工件中维护这些扩展项已不再有益,因为主工件已移到 Kotlin 中。(I6eef2)
API 变更
ArraySet
现在扩展了AbstractMutableCollection
,并且不再直接实现 Collection 接口。(If6da0、b/230860589)- 已将
ArraySet
转换为 Kotlin 代码。由于输入更为严格,某些 Kotlin 调用可能无法再编译。(Id68c1、b/230860589)- 以下调用的参数类型为
T
,而不是T?
:ArraySet<T>.contains(null)
ArraySet<T>.add(null)
ArraySet<T>.remove(null)
- 以下调用的返回值类型为
T?
,而不是T!
:ArraySet<T?>.valueAt(n)
ArraySet<T?>.removeAt(n)
ArraySet<T?>().iterator().next()
- 无法再通过 Kotlin 进行以下调用:
set.toArray()
- 请改用set.toTypedArray()
set.toArray(array)
- 请改用set.forEachIndexed(array::set)
- 以下调用的参数类型为
- 将
SparseArrayCompat
的过载构造函数组合为供 Kotlin 用户使用的可选参数。(If8407、b/227474719) - 移除了
SparseArrayCompat.get(key, defaultValue).
的运算符语法。请注意,仍允许使用.get(key)
的运算符语法,但最好将SparseArrayCompat
的 API Surface 与此库中的其他类保持一致。(I9a38d) - 将
LongSparseArray
扩展项迁移到主工件 androidx.collection:collection 中。此变更使 Kotlin 用户无需借助 -ktx 依赖项即可使用现有的 -ktx 扩展项,同时仍针对现有用户保持兼容性。在单独的 -ktx 工件中维护这些扩展项已不再有益,因为主工件已移到 Kotlin 中。(I8659a) - 将
LongSparseArray
转换为 Kotlin 代码。此变更会向其类型添加显式可 null 性,这是与二进制文件兼容的变更,但可能会导致源代码不兼容。具体而言:*无法再以属性的形式访问.isEmpty
,它在 Kotlin 中必须以函数调用的形式 (.isEmpty()
) 访问 (Idfd0f) - 将
SimpleArrayMap
转换为 Kotlin 代码。由于 Java-Kotlin 互操作性和在源代码中正确定义类型可 null 性的能力,此变更引入了一些不兼容的更改。- 软件包私有 API、
.mSize
、.mArray
、.mHashes
、.indexOf()
、.indexOfNull()
和.indexOfValue()
已变为私有,从技术上讲,这是一个二进制文件不兼容更改,但反映的是这些字段的既定公开范围,并且是我们在 Kotlin 中能够实现的最接近的效果,因为它不包含指定软件包私有可见性的方法。 - 现在已正确定义某些类型的可 null 性,受影响的方法包括:
.getOrDefault
、.keyAt
、.valueAt
、.setValueAt
、.put
、.putIfAbsent
、.removeAt
、.replace
。 - 对于 Kotlin 用户,
.isEmpty()
现在仅作为函数提供,而不可再通过属性访问。(I271b7、b/182813986)
- 软件包私有 API、
将
CircularArray
转换为 Kotlin 代码。显著变更:- 将其泛型的可 null 性更正为 non-null,该值以前无法声明,现已在其所有公开 API 中强制执行。
- 由于 Kotlin 的 Java 互操作性,以前可以将某些方法作为属性或函数来访问。不过,为了在保持二进制文件兼容性的同时减少代码重复,您必须移除这些与源代码不兼容的更改。受影响的调用包括:
.isEmpty
、.getLast()
和.getFirst()
。(Ifffac)
将
CircularIntArray
转换为 Kotlin 代码。由于 Kotlin 的 Java 互操作性,以前可以将某些方法作为属性或函数来访问。不过,为了在保持二进制文件兼容性的同时减少代码重复,您必须移除这些与源代码不兼容的更改。受影响的调用包括:.isEmpty
、.getLast()
和.getFirst()
。(Ie36ce)将
LruCache
转换为 Kotlin 代码 (Ia2f19)将
SparseArrayCompat
转换为 Kotlin 代码。(If6fe8)向
SparseArrayCompat.valueAt()
添加了一项小的行为变更,它不再针对超出size()
范围但未超出提供的初始容量的未初始化调用错误地返回null
。此变更还对以前缺失的某些类型引入了正确的可 null 性。
.get(): E?
->.get(): E
.replace(Int, Int?): Int?
->.replace(Int, Int): Int?
.replace(Int, Int?, Int?): Boolean
->.replace(Int, Int, Int): Boolean
.put(Int, Int?)
->.put(Int, Int)
.putIfAbsent(Int, Int?): Int?
->.putIfAbsent(Int, Int): Int?
.setValueAt(index: Int, value: Int?)
->.setValueAt(index: Int, value: Int)
.indexOfValue(value: Int?): Int
->.indexOfValue(value: Int): Int
.containsValue(value: Int?): Boolean
->.containsValue(value: Int): Boolean
.append(key: Int, value: Int?)
->.append(key: Int, value: Int)
版本 1.2.0
版本 1.2.0
2021 年 12 月 1 日
发布了 androidx.collection:collection:1.2.0
和 androidx.collection:collection-ktx:1.2.0
。版本 1.2.0 中包含这些提交内容。
自 1.1.0 以来的重要变更
- 向
ArraySet
添加了数组构造函数。(Id7f19) - 通过实现
entrySet().toArray()
、remove()
、removeAll()
和retainAll()
,并移除entrySet().addAll()
的实现,使entrySet()
API 符合要求 (I5d505)
版本 1.2.0-rc01
2021 年 11 月 17 日
发布了 androidx.collection:collection:1.2.0-rc01
和 androidx.collection:collection-ktx:1.2.0-rc01
。版本 1.2.0-rc01 中包含这些提交内容。
API 变更
- 与之前的 Beta 版相比没有任何变化。
版本 1.2.0-beta01
2021 年 10 月 13 日
发布了 androidx.collection:collection:1.2.0-beta01
和 androidx.collection:collection-ktx:1.2.0-beta01
。版本 1.2.0-beta01 中包含这些提交内容。
bug 修复
- 通过实现
entrySet().toArray()
、remove()
、removeAll()
和retainAll()
,并移除entrySet().addAll()
的实现,使entrySet()
API 符合要求 (I5d505)
版本 1.2.0-alpha01
2020 年 12 月 16 日
发布了 androidx.collection:collection:1.2.0-alpha01
和 androidx.collection:collection-ktx:1.2.0-alpha01
。版本 1.2.0-alpha01 中包含这些提交内容。
API 变更
- 向
ArraySet
添加了数组构造函数。(Id7f19)
版本 1.1.0
版本 1.1.0
2019 年 6 月 5 日
发布了 androidx.collection:collection:1.1.0
和 androidx.collection:collection-ktx:1.1.0
。点击此处可查看版本 1.1.0 中包含的提交内容。
下面是从 1.0.0 到 1.1.0 的变更摘要:
新功能
- 对“collection-ktx”工件中的
contains
和isNotEmpty
函数使用了更高效的实现。(aosp/866529)
API 变更
- 将
putIfAbsent
添加到LongSparseArray
、SimpleArrayMap
和SparseArrayCompat
(aosp/772608) - 将
getOrDefault
添加到SimpleArrayMap
(aosp/772607) - 将具有两个参数的
remove
添加到LongSparseArray
、SimpleArrayMap
和SparseArrayCompat
。弃用了此功能对应的 KTX 扩展。(aosp/772482) - 将具有两个参数的
replace
添加到LongSparseArray
、SimpleArrayMap
和SparseArrayCompat
(aosp/772483) - 将具有三个参数的
replace
添加到LongSparseArray
、SimpleArrayMap
和SparseArrayCompat
(aosp/772484) - 弃用了冗余
delete
方法。remove
方法提供相同的 API 和功能,并与非专用 Map 类使用的 API 相匹配。(aosp/866053)
bug 修复
- 更改了
SimpleArrayMap
,以在SimpleArrayMap.class
(而非ArrayMap.class
)上同步其数组的内部全局缓存。这可以确保在您只使用SimpleArrayMap
时通过代码缩减工具移除ArrayMap
。(aosp/934557)
版本 1.1.0-rc01
2019 年 5 月 7 日
发布了 androidx.collection:collection:1.1.0-rc01
和 androidx.collection:collection-ktx:1.1.0-rc01
。点击此处可查看此版本中包含的提交内容。
新功能
- 对“collection-ktx”工件中的
contains
和isNotEmpty
函数使用了更高效的实现。(aosp/866529)
版本 1.1.0-beta01
2019 年 4 月 3 日
发布了 androidx.collection:collection:1.1.0-beta01
和 androidx.collection:collection-ktx:1.1.0-beta01
。点击此处可查看此版本中包含的提交内容。
API 变更
- 移除了 alpha03 版本说明中提到的更改了其
@RestrictTo
值的方法。所有 AndroidX 库(现在或过去)都未使用该方法,并且它不提供公共 API 中缺少的任何功能。
bug 修复
- 更改了
SimpleArrayMap
,以在SimpleArrayMap.class
(而非ArrayMap.class
)上同步其数组的内部全局缓存。这可以确保在您只使用SimpleArrayMap
时通过代码缩减工具移除ArrayMap
。(aosp/934557)
版本 1.1.0-alpha03
2019 年 3 月 13 日
发布了 androidx.collection:collection:1.0.0-alpha03
和 androidx.collection:collection-ktx:1.0.0-alpha03
。点击此处可查看此版本中包含的完整提交内容列表。
API 变更
ArraySet
上先前标记为@RestrictTo(LIBRARY_GROUP)
的方法已更改为@RestrictTo(LIBRARY_GROUP_PREFIX)
。这是为了让其他现在具有不同 Maven 组 ID 的 AndroidX 库能像过去一样使用它。此方法将在 1.1.0-alpha04 中公开或移除,这是因为其他 AndroidX 库不应获得其他开发者没有的特殊 API。
版本 1.1.0-alpha02
2019 年 1 月 30 日
发布了 androidx.collection:collection 1.1.0-alpha02
和 androidx.collection:collection-ktx 1.1.0-alpha02
。
API 变更
- 弃用了冗余
delete
方法。remove
方法提供相同的 API 和功能,并与非专用 Map 类使用的 API 相匹配。(aosp/866053)
版本 1.1.0-alpha01
2018 年 12 月 3 日
API 变更
- 将
putIfAbsent
添加到LongSparseArray
、SimpleArrayMap
和SparseArrayCompat
(aosp/772608) - 将
getOrDefault
添加到SimpleArrayMap
(aosp/772607) - 将具有两个参数的
remove
添加到LongSparseArray
、SimpleArrayMap
和SparseArrayCompat
。弃用了此功能对应的 KTX 扩展。(aosp/772482) - 将具有两个参数的
replace
添加到LongSparseArray
、SimpleArrayMap
和SparseArrayCompat
(aosp/772483) - 将具有三个参数的
replace
添加到LongSparseArray
、SimpleArrayMap
和SparseArrayCompat
(aosp/772484)