Collection
最近更新时间 | 稳定版 | 候选版 | Beta 版 | Alpha 版 |
---|---|---|---|---|
2024 年 9 月 4 日 | 1.4.3 | - | - | 1.5.0-alpha01 |
声明依赖项
如需添加 Collection 的依赖项,您必须将 Google Maven 代码库添加到项目中。如需了解详情,请参阅 Google 的 Maven 代码库。
在应用或模块的 build.gradle
文件中添加所需工件的依赖项:
Groovy
dependencies { def collection_version = "1.4.3" implementation "androidx.collection:collection:$collection_version" }
Kotlin
dependencies { val collection_version = "1.4.3" implementation("androidx.collection:collection:$collection_version") }
如需详细了解依赖项,请参阅添加 build 依赖项。
反馈
您的反馈将帮助我们改进 Jetpack。如果您发现了新问题,或对此库有任何改进建议,请告诉我们。创建新问题前,请先查看此库中的现有问题。您可以点击星标按钮,为现有问题投票。
如需了解详情,请参阅问题跟踪器文档。
版本 1.5
版本 1.5.0-alpha01
2024 年 9 月 4 日
发布了 androidx.collection:collection-*:1.5.0-alpha01
。版本 1.5.0-alpha01 中包含这些提交内容。
API 变更
OrderedScatterSet
是新的有序、无分配集合 (Ic4178)SieveCache
是新的LruCache
无分配替代选项,可提供更出色的命中率特征。(I50a17)- 公开了
IntIntPair
和FloatFloatPair
的packedValue
内部表示形式。(Ifeb75、b/331853566) - 添加对列表集合中内容数组的访问权限。(I899d5、b/333903173)
- 添加了
DoubleList
,这是一个针对双精度值进行了优化的 List 数据结构。(Ia10d1、b/315127635)
bug 修复
版本 1.4
版本 1.4.3
2024 年 8 月 7 日
发布了 androidx.collection:collection-*:1.4.3
。版本 1.4.3 包含这些提交内容。
bug 修复
- 修复了
ScatterMap
、ScatterSet
及其基元变体中可能发生的损坏。(I38a4a、b/352560465) - 性能优化。具体而言:
<ph type="x-smartling-placeholder">
- </ph>
- 将对
check()
和required()
的调用替换为不会抛出内嵌异常的变体。这样可减少最终二进制文件的大小,更重要的是,可以略微减轻 i-cache 的压力。 - 改进了“散点”中的
removeDeletedMarkers()
集合新版本一次清除删除的标记 8 个标记,并在此过程中跳过开销更高的写入。(Ic0566)
- 将对
版本 1.4.2
2024 年 7 月 24 日
发布了 androidx.collection:collection-*:1.4.2
。版本 1.4.2 包含这些提交内容。
新功能
- 包含其他 Kotlin 多平台目标:
watchos
、tvos
、linuxArm64
。(b/352543988)
版本 1.4.1
2024 年 7 月 10 日
发布了 androidx.collection:collection-*:1.4.1
。版本 1.4.1 中包含这些提交内容。
bug 修复
- 调整大小时,从地图/集中移除已删除的 Tombstone。(7a996c5、b/345960092)
版本 1.4.0
2024 年 1 月 24 日
发布了 androidx.collection:collection-*:1.4.0
。版本 1.4.0 中包含这些提交内容。
自 1.3.0 以来的重要变更
添加了新的高效集合,用于在不使用装箱的情况下存储基元:
MutableScatterMap
和ScatterMap
- 由MutableMap
和类似地图的 APIMutableScatterSet
和ScatterSet
- 由MutableSet
和类 APIMutableObjectList
和ObjectList
- 由MutableList
和列表式 API
例如,包含整数键和引用类型值的映射为 IntObjectMap<T>
。具有长键和浮点值的映射是 LongFloatMap
。没有名为 ObjectObjectMap
的版本,因为它在 ScatterMap/MutableScatterMap
的涵盖范围内。
版本 1.4.0-rc01
2024 年 1 月 10 日
发布了 androidx.collection:collection-*:1.4.0-rc01
,该版本没有任何变化。版本 1.4.0-rc01 中包含这些提交内容。
版本 1.4.0-beta02
2023 年 11 月 29 日
发布了 androidx.collection:collection-*:1.4.0-beta02
。版本 1.4.0-beta02 中包含这些提交内容。
新功能
- 改进了
FloatFloatPair
的性能。(If5537)
bug 修复
ScatterMap.asMap()
迭代器现在会返回新实例(I28932、b/310365754)
版本 1.4.0-beta01
2023 年 11 月 15 日
发布了 androidx.collection:collection-*:1.4.0-beta01
。版本 1.4.0-beta01 中包含这些提交内容。
bug 修复
- 修复了
ListIterator
在ObjectList
中错误地设置了值,这可能会导致因IndexOutOfBoundsException
而崩溃。(I3bd8a、b/307049391)
版本 1.4.0-alpha02
2023 年 10 月 18 日
发布了 androidx.collection:collection-*:1.4.0-alpha02
。版本 1.4.0-alpha02 中包含这些提交内容。
API 变更
- 为
put
添加了重载,它会在将该值替换为所有基元集合(例如FloatFloatMap
)时返回先前的值。 - 将基元集合(例如
MutableFloatFloatMap
)的removeIf
方法转换为内嵌方法。这样可以确保不会为removeIf
分配 lambda。
版本 1.4.0-alpha01
2023 年 10 月 4 日
发布了 androidx.collection:collection-*:1.4.0-alpha01
。版本 1.4.0-alpha01 中包含这些提交内容。
新功能
添加了新的高效集合,它们分配开销较低且性能较高:
MutableScatterMap
和ScatterMap
- 由MutableMap
和类似地图的 APIMutableScatterSet
和ScatterSet
- 由MutableSet
和类 APIMutableObjectList
和ObjectList
- 由MutableList
和列表式 API
添加了新的高效集合,用于在不使用装箱的情况下存储基元:
Mutable[Int|Float|Long]List
- 具有类似MutableList<Int|Float|Long>
的 API 的类。只读[Int|Float|Long]List
也存在。例如,整数可以保存在IntList
中。Mutable[Int|Float|Long]Set
- 具有类似MutableSet<Int|Float|Long>
的 API 的类。只读[Int|Float|Long]Set
也存在。例如,整数可以保存在 IntSet 中。Mutable[Int|Float|Long|Object][Int|Float|Long|Object]Map
- 具有类似Mutable<Int|Float|Long,T, Int|Float|Long|T>
的 API 的类。只读[Int|Float|Long|Object][Int|Float|Long|Object]Map
也存在。例如,包含整数键和引用类型值的映射为IntObjectMap<T>
。具有长键和浮点值的映射是LongFloatMap
。没有名为ObjectObjectMap
的版本,因为它在ScatterMap/MutableScatterMap
的涵盖范围内。
版本 1.3.0
版本 1.3.0
2023 年 10 月 4 日
发布了 androidx.collection:collection-*:1.3.0
。版本 1.3.0 中包含这些提交内容。
自 1.2.0 以来的重要变更
- 您现在可以在 Kotlin 多平台项目中使用集合。请注意,合集的非 Android 目标仍处于实验阶段,但我们决定合并版本,以便开发者更轻松地试用这些版本。
- 所有源代码都已迁移到 Kotlin。在进行这项更改的过程中,许多 API 现在都针对可为 null 性进行了正确的类型化,一些软件包私有成员已变为
internal
。下面的 1.3.x 次要版本说明提供了确切更改的列表。 - 随着 Kotlin 迁移,
collection-ktx
已与主集合工件合并。collection-ktx
现在为空,您可以放心地放弃对collection:collection-ktx
的任何依赖项,改为使用collection:collection
。
版本 1.3.0-rc01
2023 年 9 月 6 日
发布了 androidx.collection:collection-*:1.3.0-rc01
,该版本没有任何变化。版本 1.3.0-rc01 中包含这些提交内容。
版本 1.3.0-beta01
2023 年 8 月 9 日
发布了 androidx.collection:collection-*:1.3.0-beta01
。版本 1.3.0-beta01 中包含这些提交内容。
版本 1.3.0-alpha04
2023 年 3 月 24 日
发布了 androidx.collection:collection-*:1.3.0-alpha04
。
bug 修复
- 从 Maven 工件中移除了依赖项约束,以解决 Kotlin 原生目标中的构建问题(b/274786186、KT-57531)。
版本 1.3.0-alpha03
2023 年 3 月 22 日
发布了 androidx.collection:collection-*:1.3.0-alpha03
。版本 1.3.0-alpha03 中包含这些提交内容。
新功能
- 您现在可以在 KMM 项目中使用集合。请注意,合集的非 Android 目标仍处于实验阶段,但我们决定合并版本,以便开发者更轻松地试用这些版本。
API 变更
ArraySet
现在会实现MutableCollections
(而非AbstractMutableCollection
),以实现toArray
的内存使用效率更高的实现 (I1ac32)
bug 修复
ArraySet.toArray
现在仅适用于 JVM,因为它始终包含的只是为了与 Java 兼容。Kotlin 用户通常应改用 stdlib 的.toTypedArray
帮助程序,它提供完全相同的功能,并增加了类型安全性。(I2c59b)
版本 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)