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-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)