集合

  
减少现有和新增的小型集合的内存占用。
最新更新 稳定版 候选版本 Beta 版 Alpha 版
2024 年 11 月 13 日 1.4.5 - - 1.5.0-alpha06

声明依赖项

要添加对 Collection 的依赖项,您必须将 Google Maven 存储库添加到您的项目中。阅读Google 的 Maven 存储库以了解更多信息。

在应用或模块的build.gradle文件中添加所需构件的依赖项

Groovy

dependencies {
    def collection_version = "1.4.5"
    implementation "androidx.collection:collection:$collection_version"
}

Kotlin

dependencies {
    val collection_version = "1.4.5"
    implementation("androidx.collection:collection:$collection_version")
}

有关依赖项的更多信息,请参阅添加构建依赖项

反馈

您的反馈有助于改进 Jetpack。如果您发现新问题或有改进此库的想法,请告诉我们。在创建新问题之前,请查看此库中现有的问题。您可以通过点击星形按钮为现有问题添加您的投票。

创建新问题

有关更多信息,请参阅问题跟踪器文档

版本 1.5

版本 1.5.0-alpha06

2024 年 11 月 13 日

androidx.collection:collection-*:1.5.0-alpha06 已发布。版本 1.5.0-alpha06 包含这些提交

错误修复

  • 修复了在添加大量项目导致重复键冲突时,SieveCacheOrderedScatterSet 中可能发生的崩溃。(Iaaf3db/375607736
  • 将 wasm 目标添加到 collection 库。(I66fe3b/352722444

版本 1.5.0-alpha05

2024 年 10 月 30 日

androidx.collection:collection-*:1.5.0-alpha05 已发布。版本 1.5.0-alpha05 包含这些提交

版本 1.5.0-alpha04

2024 年 10 月 16 日

androidx.collection:collection-*:1.5.0-alpha04 已发布。版本 1.5.0-alpha04 包含 这些提交

版本 1.5.0-alpha03

2024年10月2日

androidx.collection:collection-*:1.5.0-alpha03 已发布。版本 1.5.0-alpha03 包含 这些提交

API 变更

  • Kotlin 版本更新至 1.9 (I1a14c)

外部贡献

  • contains 替换为 containsKey。感谢 Jake Wharton!(I9362b)
  • 为标量专用集合添加容器构建器。感谢 Jake Wharton!(I13179)

版本 1.5.0-alpha02

2024年9月18日

androidx.collection:collection-*:1.5.0-alpha02 已发布。版本 1.5.0-alpha02 包含 这些提交

API 变更

版本 1.5.0-alpha01

2024年9月4日

androidx.collection:collection-*:1.5.0-alpha01 已发布。版本 1.5.0-alpha01 包含 这些提交

API 变更

  • OrderedScatterSet 是一个新的有序、无分配集合 (Ic4178)
  • SieveCacheLruCache 的一个新的无分配替代方案,它提供了更好的命中率特性。(I50a17)
  • 公开了 IntIntPairFloatFloatPairpackedValue 内部表示形式。(Ifeb75b/331853566)
  • 在列表集合中添加对内容数组的访问。(I899d5b/333903173)
  • 添加 DoubleList,一种针对 Double 值优化的类似 List 的数据结构。(Ia10d1b/315127635)

错误修复

  • 集合库正在迁移到 Kotlin 1.9 (I0782f)
  • 优化了许多集合以提高效率。(Ic0566)

版本 1.4

版本 1.4.5

2024 年 10 月 30 日

androidx.collection:collection-*:1.4.5 已发布。版本 1.4.5 包含 这些提交

版本 1.4.4

2024年9月18日

androidx.collection:collection-*:1.4.4 已发布。版本 1.4.4 包含 这些提交

错误修复

  • 在排序空集合时解决 ArrayIndexOutOfBounds 问题。(I65245)

版本 1.4.3

2024年8月7日

androidx.collection:collection-*:1.4.3 已发布。版本 1.4.3 包含 这些提交

错误修复

  • 修复了 ScatterMapScatterSet 及其基本类型变体中可能发生的损坏问题。(I38a4ab/352560465)
  • 性能优化。具体包括:
    • 将对 check()required() 的调用替换为不内联异常抛出的变体。这减少了最终二进制文件的大小,更重要的是稍微减轻了 i 缓存的压力。
    • 改进了“散列”系列集合中的 removeDeletedMarkers()。新版本一次清除 8 个已删除的标记,并在过程中跳过更多昂贵的写入操作。(Ic0566)

版本 1.4.2

2024年7月24日

androidx.collection:collection-*:1.4.2 已发布。版本 1.4.2 包含 这些提交

新功能

  • 包含其他 Kotlin 多平台目标:watchostvoslinuxArm64。(b/352543988)

版本 1.4.1

2024年7月10日

androidx.collection:collection-*:1.4.1 已发布。版本 1.4.1 包含 这些提交

错误修复

版本 1.4.0

2024年1月24日

androidx.collection:collection-*:1.4.0 已发布。版本 1.4.0 包含这些提交。

自 1.3.0 以来重要更改

已添加用于存储基本类型而无需装箱的新高效集合

  • MutableScatterMap & ScatterMap - 具有 MutableMap 和类似 Map 的 API 的类
  • MutableScatterSet & ScatterSet - 具有 MutableSet 和类似 Set 的 API 的类
  • MutableObjectList & ObjectList - 具有 MutableList 和类似 List 的 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)

错误修复

版本 1.4.0-beta01

2023年11月15日

androidx.collection:collection-*:1.4.0-beta01 已发布。版本 1.4.0-beta01 包含这些提交。

错误修复

  • 修复了 ListIteratorObjectList 中错误设置值的问题,这可能导致由于 IndexOutOfBoundsException 而导致崩溃。(I3bd8ab/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 和类似 Map 的 API 的类
  • MutableScatterSet & ScatterSet - 具有 MutableSet 和类似 Set 的 API 的类
  • MutableObjectList & ObjectList - 具有 MutableList 和类似 List 的 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 现在已针对空值进行了正确的类型化,并且一些包私有成员已变为 internal。下面 1.3.x 的次要版本说明中提供了确切更改的列表。
  • 随着 Kotlin 迁移,collection-ktx 已与主集合工件合并。您可以安全地放弃对 collection:collection-ktx 的任何依赖项,而改用 collection:collection,因为 collection-ktx 现在为空。

版本 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 已发布。

错误修复

  • 从 Maven 工件中删除依赖约束,以解决 Kotlin Native 目标中的构建问题 (b/274786186KT-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)

错误修复

  • ArraySet.toArray 现在仅在 JVM 上可用,因为它始终仅为了与 Java 的兼容性而包含。Kotlin 用户通常应该使用 stdlib 的 .toTypedArray 帮助程序,它提供了完全相同的功能并增加了类型安全性。(I2c59b)

版本 1.3.0-alpha02

2022 年 7 月 27 日

androidx.collection:collection:1.3.0-alpha02androidx.collection:collection-ktx:1.3.0-alpha02 已发布。 版本 1.3.0-alpha02 包含这些提交。

API 变更

版本 1.3.0-alpha01

2022 年 6 月 29 日

androidx.collection:collection:1.3.0-alpha01androidx.collection:collection-ktx:1.3.0-alpha01 已发布。 版本 1.3.0-alpha01 包含这些提交。

新功能

  • collection-ktx 扩展已迁移到主集合工件 androidx.collection:collection 中。此更改使现有的 -ktx 扩展可以在不依赖 -ktx 的情况下供 Kotlin 用户访问,同时仍然保持与现有用户的兼容性。由于主工件已迁移到 Kotlin,因此在单独的 -ktx 工件中维护这些扩展不再有益。(I6eef2)

API 变更

  • ArraySet 现在扩展了 AbstractMutableCollection,不再直接实现 Collection 接口。(If6da0b/230860589)
  • ArraySet 转换为 Kotlin。由于类型更严格,某些 Kotlin 调用可能无法再编译。(Id68c1b/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 用户的可选项。(If8407b/227474719)
  • 删除 SparseArrayCompat.get(key, defaultValue) 的运算符语法。请注意,这仍然允许 .get(key) 的运算符语法,但使 SparseArrayCompat 的 API 表面与该库中的其他类更好地对齐。(I9a38d)
  • LongSparseArray 扩展迁移到主工件 androidx.collection:collection 中。此更改使现有的 -ktx 扩展可以在不依赖 -ktx 的情况下供 Kotlin 用户访问,同时仍然保持与现有用户的兼容性。由于主工件已迁移到 Kotlin,因此在单独的 -ktx 工件中维护这些扩展不再有益。(I8659a)
  • LongSparseArray 转换为 Kotlin。此更改为其类型添加了显式空值,这是一个二进制兼容的更改,但可能会导致源代码不兼容。特别是:* .isEmpty 现在无法作为属性访问,它必须在 Kotlin 中作为函数调用访问 - .isEmpty() (Idfd0f)
  • SimpleArrayMap 转换为 Kotlin。此更改引入了一些不兼容的更改,这是 Java-Kotlin 互操作性和能够在源代码中正确定义类型空值的结果。
    • 包私有 API .mSize.mArray.mHashes.indexOf().indexOfNull().indexOfValue() 已设为私有 - 从技术上讲,这是一个二进制不兼容的更改,但反映了这些字段的预期可见性,并且是在 Kotlin 中可以实现的最接近的结果,因为它不包含指定包私有可见性的方法。
    • 某些类型的空值现在已正确定义,受影响的方法为:.getOrDefault.keyAt.valueAt.setValueAt.put.putIfAbsent.removeAt.replace
    • 对于 Kotlin 用户,.isEmpty() 现在仅可作为函数使用,而不是也可通过属性访问。(I271b7b/182813986)
  • CircularArray 转换为 Kotlin。显著变化

    • 将其泛型的空值更正为非空,这以前无法声明,但在其所有公共 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

    此更改还引入了以前缺少的某些类型的正确空值。

    • .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.0androidx.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-rc01androidx.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-beta01androidx.collection:collection-ktx:1.2.0-beta01 已发布。 版本 1.2.0-beta01 包含这些提交。

错误修复

  • 通过实现entrySet().toArray()remove()removeAll()retainAll(),并移除 entrySet().addAll() 的实现,使 entrySet() 符合 API 规范(I5d505)。

版本 1.2.0-alpha01

2020 年 12 月 16 日

androidx.collection:collection:1.2.0-alpha01androidx.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.0androidx.collection:collection-ktx:1.1.0 已发布。包含在 1.1.0 中的提交可以在这里找到 这里

以下是 1.0.0 到 1.1.0 的更改摘要

新功能

  • 在“collection-ktx”构件中,为 containsisNotEmpty 函数使用更高效的实现。(aosp/866529

API 更改

  • putIfAbsent 添加到 LongSparseArraySimpleArrayMapSparseArrayCompat 中(aosp/772608
  • getOrDefault 添加到 SimpleArrayMap 中(aosp/772607
  • 将两个参数的 remove 添加到 LongSparseArraySimpleArrayMapSparseArrayCompat 中。弃用此功能的相应 KTX 扩展。(aosp/772482
  • 将两个参数的 replace 添加到 LongSparseArraySimpleArrayMapSparseArrayCompat 中(aosp/772483
  • 将三个参数的 replace 添加到 LongSparseArraySimpleArrayMapSparseArrayCompat 中(aosp/772484
  • 弃用冗余的 delete 方法。remove 方法提供了相同的 API 和功能,并且与非专门化 Map 使用的 API 相匹配。(aosp/866053

错误修复

  • SimpleArrayMap 更改为在其内部数组的全局缓存上同步 SimpleArrayMap.class,而不是 ArrayMap.class。这确保了如果您仅使用 SimpleArrayMap,则代码缩减工具可以移除 ArrayMap。(aosp/934557

版本 1.1.0-rc01

2019 年 5 月 7 日

androidx.collection:collection:1.1.0-rc01androidx.collection:collection-ktx:1.1.0-rc01 已发布。此版本中包含的提交可以在这里找到 这里

新功能

  • 在“collection-ktx”构件中,为 containsisNotEmpty 函数使用更高效的实现。(aosp/866529

版本 1.1.0-beta01

2019 年 4 月 3 日

androidx.collection:collection:1.1.0-beta01androidx.collection:collection-ktx:1.1.0-beta01 已发布。此版本中包含的提交可以在这里找到 这里

API 更改

  • alpha03 发行说明 中提到的其 @RestrictTo 值已更改的方法已被删除。它从未被任何 AndroidX 库(现在或历史上)使用过,并且它没有提供公共 API 中缺少的任何功能。

错误修复

  • SimpleArrayMap 更改为在其内部数组的全局缓存上同步 SimpleArrayMap.class,而不是 ArrayMap.class。这确保了如果您仅使用 SimpleArrayMap,则代码缩减工具可以移除 ArrayMap。(aosp/934557

版本 1.1.0-alpha03

2019 年 3 月 13 日

androidx.collection:collection:1.0.0-alpha03androidx.collection:collection-ktx:1.0.0-alpha03 已发布。此版本中包含的完整提交列表可以在这里找到 这里

API 更改

  • ArraySet 上之前标记为 @RestrictTo(LIBRARY_GROUP) 的方法已更改为 @RestrictTo(LIBRARY_GROUP_PREFIX)。这是为了支持其他 AndroidX 库的历史使用,这些库现在位于不同的 Maven 组 ID 中。此方法将在 1.1.0-alpha04 中公开或删除,因为其他 AndroidX 库不应获得其他开发人员无法使用的特殊 API。

版本 1.1.0-alpha02

2019 年 1 月 30 日

androidx.collection:collection 1.1.0-alpha02androidx.collection:collection-ktx 1.1.0-alpha02 已发布。

API 更改

  • 弃用冗余的 delete 方法。remove 方法提供了相同的 API 和功能,并且与非专门化 Map 使用的 API 相匹配。(aosp/866053

版本 1.1.0-alpha01

2018 年 12 月 3 日

API 更改

  • putIfAbsent 添加到 LongSparseArraySimpleArrayMapSparseArrayCompat 中(aosp/772608
  • getOrDefault 添加到 SimpleArrayMap 中(aosp/772607
  • 将两个参数的 remove 添加到 LongSparseArraySimpleArrayMapSparseArrayCompat 中。弃用此功能的相应 KTX 扩展。(aosp/772482
  • 将两个参数的 replace 添加到 LongSparseArraySimpleArrayMapSparseArrayCompat 中(aosp/772483
  • 将三个参数的 replace 添加到 LongSparseArraySimpleArrayMapSparseArrayCompat 中(aosp/772484