Collection

  
降低小型現有集合和新集合的記憶體影響。
最近更新時間 穩定版 候選版 Beta 版 Alpha 版
2024 年 9 月 4 日 1.4.3 版 - - 1.5.0-alpha01

宣告依附元件

如要新增「精選」依附元件,您必須將 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")
}

如要進一步瞭解依附元件,請參閱「新增建構依附元件」一文。

意見回饋

您的意見可協助我們改善 Jetpack。如果您發現新問題,或是有改進這個程式庫的建議,請告訴我們。回報新問題前,請先查看這個程式庫的現有問題。只要按一下星號按鈕,即可投票給現有的問題。

建立新問題

詳情請參閱 Issue Tracker 說明文件

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,這是針對雙精度值進行最佳化的清單類資料結構。(Ia10d1b/315127635)

修正錯誤

  • 集合程式庫即將移至指定 Kotlin 1.9 (I0782f)
  • 將許多集合最佳化,更有效率。(Ic0566)。

1.4 版

1.4.3 版本

2024 年 8 月 7 日

發布 androidx.collection:collection-*:1.4.3。1.4.3 版包含這些修訂版本

修正錯誤

  • 已修正 ScatterMapScatterSet 及其原始變化版本中可能發生的損毀。(I38a4ab/352560465)
  • 成效最佳化。請特別注意以下幾點:
    • 將對 check()required() 的呼叫替換為不會內嵌例外狀況的變化版本。這會減少最終二進位檔的大小,並且更重要地減輕 i-cache 壓力。
    • 改善「散播」中的 removeDeletedMarkers()系列。新版本可以在過程中清除刪除的標記 8 標記,並略過較昂貴的寫入作業。(Ic0566)。

1.4.2 版

2024 年 7 月 24 日

發布 androidx.collection:collection-*:1.4.2。1.4.2 版包含這些修訂版本

新功能

  • 包含其他 Kotlin Multiplatform 目標:watchostvoslinuxArm64。(b/352543988)。

1.4.1 版本

2024 年 7 月 10 日

發布 androidx.collection:collection-*:1.4.1。1.4.1 版包含這些修訂版本

修正錯誤

  • 調整大小時,將已刪除的空值從地圖/集合中移除。(7a996c5b/345960092)

1.4.0 版本

2024 年 1 月 24 日

發布 androidx.collection:collection-*:1.4.01.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-beta021.4.0-beta02 版包含以下修訂項目。

新功能

  • 已提升 FloatFloatPair 的效能。(If5537)。

修正錯誤

  • ScatterMap.asMap() 疊代器現在會傳回新的執行個體 (I28932b/310365754)

1.4.0-beta01 版本

2023 年 11 月 15 日

發布 androidx.collection:collection-*:1.4.0-beta011.4.0-beta01 版包含此連結所列的修訂項目。

修正錯誤

  • 修正 ListIterator 中可能導致因 IndexOutOfBoundsException 而造成當機的 ObjectList 值錯誤的問題。(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.01.3.0 版包含此連結所列的修訂項目。

自 1.2.0 版以來的重要異動

  • 您現在可以在 Kotlin Multiplatform 專案中使用集合了。請注意,Google 集合的非 Android 目標功能仍處於實驗階段,但我們決定合併多個版本,方便開發人員試用。
  • 所有來源皆已遷移至 Kotlin。在本次變更中,許多 API 現在均正確輸入空值,而少數套件私人成員現已成為 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

修正錯誤

  • 移除 Maven 構件中的依附元件限制,以解決 Kotlin Native Targets 中的建構問題 (b/274786186KT-57531)。

1.3.0-alpha03 版

2023 年 3 月 22 日

發布 androidx.collection:collection-*:1.3.0-alpha031.3.0-alpha03 版包含此連結所列的修訂項目

新功能

  • 您現在可以在 KMM 專案中使用集合。請注意,Google 集合的非 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-alpha021.3.0-alpha02 版包含以下修訂項目。

API 變更

1.3.0-alpha01 版本

2022 年 6 月 29 日

發布了 androidx.collection:collection:1.3.0-alpha01androidx.collection:collection-ktx:1.3.0-alpha011.3.0-alpha01 版本包含以下修訂項目。

新功能

  • collection-ktx 擴充功能已遷移至主要 Collection 構件 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 介面與這個程式庫中的其他類別對齊。(I9a38d)。
  • LongSparseArray 擴充功能遷移至主要構件 androidx.collection:collection。這項變更讓 Kotlin 使用者可以存取現有的 -ktx 擴充功能,而不需要 -ktx 依附元件,同時仍保持與現有使用者的相容性。將這些擴充功能保留在單獨的 -ktx 構件中,已無益處,因為主要構件已移至 Kotlin。(I8659a)。
  • LongSparseArray 轉換為 Kotlin。這項變更會在類型中新增明確的空值,這是與二進位檔相容的變更,但可能會導致來源不相容。具體來說:* .isEmpty 無法再以屬性的形式存取,必須在 Kotlin 中以函式呼叫的方式存取 - .isEmpty() (Idfd0f)
  • SimpleArrayMap 轉換為 Kotlin。由於 Java-Kotlin 互通性及可正確定義來源中類型的空值,這項變更也可能造成一些不相容的變更。
    • 私有套件、.mSize.mArray.mHashes 已建立.indexOf().indexOfNull().indexOfValue() private - 這在技術上是與二進位檔不相容的變更,但 反映這些欄位的預期可見性,也是距離最近 在 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() 的微小行為變更 不再對未初始化的呼叫錯誤傳回 null 範圍為 size(),但在提供的初始容量內。

    這項變更也適用於部分類型的正確空值

    • .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() 符合法規規定 (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() 符合法規規定 (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 異動

  • 新增 putIfAbsentLongSparseArraySimpleArrayMapSparseArrayCompat (aosp/772608)
  • 新增 getOrDefaultSimpleArrayMap (aosp/772607)
  • 新增兩個引數 removeLongSparseArraySimpleArrayMapSparseArrayCompat。淘汰這項功能的對應 KTX 擴充功能。(aosp/772482)
  • 新增兩個引數 replaceLongSparseArraySimpleArrayMapSparseArrayCompat (aosp/772483)
  • 新增三個引數 replaceLongSparseArraySimpleArrayMapSparseArrayCompat (aosp/772484)
  • 淘汰多餘的 delete 方法。remove 方法提供相同的 API 和功能,而且與非特殊活動地圖使用的 API 相符。(aosp/866053)

修正錯誤

  • 變更 SimpleArrayMap 以同步處理其在 SimpleArrayMap.class 陣列的內部全域快取,而非 ArrayMap.class。這可確保您僅使用 SimpleArrayMapArrayMap 可由程式碼縮減工具移除。(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。這可確保您僅使用 SimpleArrayMapArrayMap 可由程式碼縮減工具移除。(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 和功能,而且與非特殊活動地圖使用的 API 相符。(aosp/866053)

1.1.0-alpha01 版本

2018 年 12 月 3 日

API 變更

  • 新增 putIfAbsentLongSparseArraySimpleArrayMapSparseArrayCompat (aosp/772608)
  • 新增 getOrDefaultSimpleArrayMap (aosp/772607)
  • 新增兩個引數 removeLongSparseArraySimpleArrayMapSparseArrayCompat。淘汰這項功能的對應 KTX 擴充功能。(aosp/772482)
  • 新增兩個引數 replaceLongSparseArraySimpleArrayMapSparseArrayCompat (aosp/772483)
  • 新增三個引數 replaceLongSparseArraySimpleArrayMapSparseArrayCompat (aosp/772484)