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
  • 公开了 IntIntPairFloatFloatPairpackedValue 内部表示形式。(Ifeb75b/331853566
  • 添加对列表集合中内容数组的访问权限。(I899d5b/333903173
  • 添加了 DoubleList,这是一个针对双精度值进行了优化的 List 数据结构。(Ia10d1b/315127635

bug 修复

  • Collections 库即将以 Kotlin 1.9 为目标平台 (I0782f)
  • 优化许多集合以提高效率。(Ic0566

版本 1.4

版本 1.4.3

2024 年 8 月 7 日

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

bug 修复

  • 修复了 ScatterMapScatterSet 及其基元变体中可能发生的损坏。(I38a4ab/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 多平台目标:watchostvoslinuxArm64。(b/352543988)

版本 1.4.1

2024 年 7 月 10 日

发布了 androidx.collection:collection-*:1.4.1。版本 1.4.1 中包含这些提交内容

bug 修复

  • 调整大小时,从地图/集中移除已删除的 Tombstone。(7a996c5b/345960092

版本 1.4.0

2024 年 1 月 24 日

发布了 androidx.collection:collection-*:1.4.0版本 1.4.0 中包含这些提交内容。

自 1.3.0 以来的重要变更

添加了新的高效集合,用于在不使用装箱的情况下存储基元:

  • MutableScatterMapScatterMap - 由MutableMap和类似地图的 API
  • MutableScatterSetScatterSet - 由MutableSet和类 API
  • MutableObjectListObjectList - 由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 修复

版本 1.4.0-beta01

2023 年 11 月 15 日

发布了 androidx.collection:collection-*:1.4.0-beta01版本 1.4.0-beta01 中包含这些提交内容

bug 修复

  • 修复了 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 中包含这些提交内容

新功能

添加了新的高效集合,它们分配开销较低且性能较高:

  • MutableScatterMapScatterMap - 由MutableMap和类似地图的 API
  • MutableScatterSetScatterSet - 由MutableSet和类 API
  • MutableObjectListObjectList - 由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/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)

bug 修复

  • 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 中。此变更使 Kotlin 用户无需借助 -ktx 依赖项即可使用现有的 -ktx 扩展项,同时仍针对现有用户保持兼容性。在单独的 -ktx 工件中维护这些扩展项已不再有益,因为主工件已移到 Kotlin 中。(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 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() 现在仅作为函数提供,而不可再通过属性访问。(I271b7b/182813986
  • 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.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 中包含这些提交内容

bug 修复

  • 通过实现 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)

bug 修复

  • 更改了 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 中缺少的任何功能。

bug 修复

  • 更改了 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)。这是为了让其他现在具有不同 Maven 组 ID 的 AndroidX 库能像过去一样使用它。此方法将在 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)