Koleksi

  
Mengurangi dampak memori dari collection berukuran kecil, baik yang baru maupun yang sudah ada.
Update Terbaru Rilis Stabil Kandidat Rilis Rilis Beta Rilis Alfa
4 September 2024 1.4.3 - - 1.5.0-alpha01

Mendeklarasikan dependensi

Untuk menambahkan dependensi pada Collection, Anda harus menambahkan repositori Maven Google ke project Anda. Baca repositori Maven Google untuk mengetahui informasi selengkapnya.

Tambahkan dependensi untuk artefak yang diperlukan dalam file build.gradle bagi aplikasi atau modul Anda:

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

Untuk mengetahui informasi dependensi selengkapnya, lihat Menambahkan Dependensi Build.

Masukan

Masukan Anda membantu meningkatkan kualitas Jetpack. Beri tahu kami jika Anda menemukan masalah baru atau mempunyai masukan untuk meningkatkan kualitas library ini. Harap periksa masalah yang sudah diketahui dalam library ini sebelum membuat laporan baru. Anda dapat memberikan suara untuk masalah yang sudah diketahui dengan mengklik tombol bintang.

Laporkan masalah baru

Lihat dokumentasi Issue Tracker untuk informasi selengkapnya.

Versi 1.5

Versi 1.5.0-alpha01

4 September 2024

androidx.collection:collection-*:1.5.0-alpha01 dirilis. Versi 1.5.0-alpha01 berisi commit ini.

Perubahan API

  • OrderedScatterSet adalah koleksi baru yang diurutkan dan bebas alokasi (Ic4178)
  • SieveCache adalah pengganti baru bebas alokasi untuk LruCache yang menawarkan karakteristik rasio hit yang lebih baik. (I50a17)
  • Mengekspos representasi internal packedValue untuk IntIntPair dan FloatFloatPair. (Ifeb75, b/331853566)
  • Menambahkan akses ke array konten dalam koleksi daftar. (I899d5, b/333903173)
  • Menambahkan DoubleList, struktur data seperti Daftar yang dioptimalkan untuk nilai Ganda. (Ia10d1, b/315127635)

Perbaikan Bug

  • Library koleksi dipindahkan untuk menargetkan Kotlin 1.9 (I0782f)
  • Optimalkan banyak koleksi agar lebih efisien. (Ic0566)

Versi 1.4

Versi 1.4.3

7 Agustus 2024

androidx.collection:collection-*:1.4.3 dirilis. Versi 1.4.3 berisi commit ini.

Perbaikan Bug

  • Perbaikan kerusakan yang dapat terjadi di ScatterMap, ScatterSet, dan varian primitifnya. (I38a4a, b/352560465)
  • Pengoptimalan performa. Pada khususnya:
    • Ganti panggilan ke check() dan required() dengan varian yang tidak inline dengan pengecualian. Ini mengurangi ukuran biner akhir dan, yang lebih penting, sedikit mengurangi tekanan i-cache.
    • Meningkatkan removeDeletedMarkers() di "sebar" kumpulan koleksi tertentu. Versi baru ini menghapus 8 penanda yang dihapus sekaligus dan melewati penulisan yang lebih mahal dalam prosesnya. (Ic0566)

Versi 1.4.2

24 Juli 2024

androidx.collection:collection-*:1.4.2 dirilis. Versi 1.4.2 berisi commit ini.

Fitur Baru

  • Mencakup target Multiplatform Kotlin tambahan: watchos, tvos, linuxArm64. (b/352543988)

Versi 1.4.1

10 Juli 2024

androidx.collection:collection-*:1.4.1 dirilis. Versi 1.4.1 berisi commit ini.

Perbaikan Bug

  • Menghapus tombstone yang dihapus dari Peta/Set saat mengubah ukuran. (7a996c5, b/345960092)

Versi 1.4.0

24 Januari 2024

androidx.collection:collection-*:1.4.0 dirilis. Versi 1.4.0 berisi commit ini.

Perubahan penting sejak versi 1.3.0

Koleksi baru dengan efisiensi tinggi untuk menyimpan primitif tanpa boxing telah ditambahkan:

  • MutableScatterMap & ScatterMap - Kelas dengan MutableMap & API mirip peta
  • MutableScatterSet & ScatterSet - Kelas dengan MutableSet & API set-like
  • MutableObjectList & ObjectList - Kelas dengan MutableList & API seperti daftar

Misalnya, peta dengan kunci bilangan bulat dan nilai jenis referensi adalah IntObjectMap<T>. Peta dengan kunci panjang dan nilai float adalah LongFloatMap. Tidak ada versi dengan nama ObjectObjectMap karena itu dicakup oleh ScatterMap/MutableScatterMap.

Versi 1.4.0-rc01

10 Januari 2024

androidx.collection:collection-*:1.4.0-rc01 dirilis tanpa perubahan. Versi 1.4.0-rc01 berisi commit ini.

Versi 1.4.0-beta02

29 November 2023

androidx.collection:collection-*:1.4.0-beta02 dirilis. Versi 1.4.0-beta02 berisi commit ini.

Fitur Baru

  • Peningkatan performa FloatFloatPair. (If5537)

Perbaikan Bug

Versi 1.4.0-beta01

15 November 2023

androidx.collection:collection-*:1.4.0-beta01 dirilis. Versi 1.4.0-beta01 berisi commit ini.

Perbaikan Bug

  • Perbaikan untuk ListIterator yang salah menetapkan nilai di ObjectList yang dapat mengakibatkan error karena IndexOutOfBoundsException. (I3bd8a, b/307049391)

Versi 1.4.0-alpha02

18 Oktober 2023

androidx.collection:collection-*:1.4.0-alpha02 dirilis. Versi 1.4.0-alpha02 berisi commit ini.

Perubahan API

  • Menambahkan overload untuk put yang menampilkan nilai sebelumnya saat diganti ke semua koleksi dasar, seperti FloatFloatMap.
  • Mengonversi metode removeIf pada koleksi dasar, seperti MutableFloatFloatMap menjadi inline. Tindakan ini memastikan bahwa lambda untuk removeIf tidak dialokasikan.

Versi 1.4.0-alpha01

4 Oktober 2023

androidx.collection:collection-*:1.4.0-alpha01 dirilis. Versi 1.4.0-alpha01 berisi commit ini.

Fitur Baru

Kumpulan baru dengan efisiensi tinggi telah ditambahkan, yang memiliki overhead alokasi rendah dan performa tinggi:

  • MutableScatterMap & ScatterMap - Kelas dengan MutableMap & API mirip peta
  • MutableScatterSet & ScatterSet - Kelas dengan MutableSet & API set-like
  • MutableObjectList & ObjectList - Kelas dengan MutableList & API seperti daftar

Koleksi baru dengan efisiensi tinggi untuk menyimpan primitif tanpa boxing telah ditambahkan:

  • Mutable[Int|Float|Long]List - Class dengan API seperti MutableList<Int|Float|Long>. [Int|Float|Long]List hanya-baca juga ada. Misalnya, bilangan bulat dapat disimpan di IntList.
  • Mutable[Int|Float|Long]Set - Class dengan API seperti MutableSet<Int|Float|Long>. [Int|Float|Long]Set hanya-baca juga ada. Misalnya, bilangan bulat dapat disimpan dalam IntSet.
  • Mutable[Int|Float|Long|Object][Int|Float|Long|Object]Map - Class dengan API seperti Mutable<Int|Float|Long,T, Int|Float|Long|T>. [Int|Float|Long|Object][Int|Float|Long|Object]Map hanya-baca juga ada. Misalnya, peta dengan kunci bilangan bulat dan nilai jenis referensi adalah IntObjectMap<T>. Peta dengan kunci panjang dan nilai float adalah LongFloatMap. Tidak ada versi dengan nama ObjectObjectMap karena itu dicakup oleh ScatterMap/MutableScatterMap.

Versi 1.3.0

Versi 1.3.0

4 Oktober 2023

androidx.collection:collection-*:1.3.0 dirilis. Versi 1.3.0 berisi commit berikut ini.

Perubahan penting sejak versi 1.2.0

  • Anda kini dapat menggunakan Collections di project Multiplatform Kotlin. Perlu diketahui bahwa koleksi target non-Android masih bersifat eksperimental, tetapi kami memutuskan untuk menggabungkan versi agar lebih mudah bagi developer untuk mencobanya.
  • Semua sumber telah dimigrasikan ke Kotlin. Sebagai bagian dari perubahan ini, banyak API kini diketik dengan benar untuk nullity dan beberapa anggota pribadi paket telah menjadi internal. Daftar perubahan persisnya tersedia di catatan rilis minor untuk 1.3.x di bawah.
  • Seiring dengan migrasi Kotlin, collection-ktx telah digabungkan dengan artefak koleksi utama. Anda dapat dengan aman melepaskan dependensi apa pun di collection:collection-ktx dan mendukung collection:collection karena collection-ktx sekarang kosong.

Versi 1.3.0-rc01

6 September 2023

androidx.collection:collection-*:1.3.0-rc01 dirilis tanpa perubahan. Versi 1.3.0-rc01 berisi commit ini.

Versi 1.3.0-beta01

9 Agustus 2023

androidx.collection:collection-*:1.3.0-beta01 dirilis. Versi 1.3.0-beta01 berisi commit ini.

Versi 1.3.0-alpha04

24 Maret 2023

androidx.collection:collection-*:1.3.0-alpha04 dirilis.

Perbaikan Bug

  • Menghapus batasan dependensi dari artefak Maven untuk mengatasi masalah build di Target Native Kotlin (b/274786186, KT-57531).

Versi 1.3.0-alpha03

22 Maret 2023

androidx.collection:collection-*:1.3.0-alpha03 dirilis. Versi 1.3.0-alpha03 berisi commit ini.

Fitur Baru

  • Anda kini dapat menggunakan Koleksi di project KMM. Perlu diketahui bahwa koleksi target non-Android masih bersifat eksperimental, tetapi kami memutuskan untuk menggabungkan versi agar lebih mudah bagi developer untuk mencobanya.

Perubahan API

  • ArraySet kini mengimplementasikan MutableCollections, bukan AbstractMutableCollection, untuk memungkinkan implementasi toArray yang lebih hemat memori (I1ac32)

Perbaikan Bug

  • ArraySet.toArray kini hanya tersedia di JVM karena selalu hanya disertakan untuk kompatibilitas dengan Java. Sebagai gantinya, pengguna Kotlin umumnya harus menggunakan helper .toTypedArray stdlib, yang menyediakan fungsi yang sama persis dengan keamanan jenis tambahan. (I2c59b)

Versi 1.3.0-alpha02

27 Juli 2022

androidx.collection:collection:1.3.0-alpha02 dan androidx.collection:collection-ktx:1.3.0-alpha02 dirilis. Versi 1.3.0-alpha02 berisi commit ini.

Perubahan API

Versi 1.3.0-alpha01

29 Juni 2022

androidx.collection:collection:1.3.0-alpha01 dan androidx.collection:collection-ktx:1.3.0-alpha01 dirilis. Versi 1.3.0-alpha01 berisi commit ini.

Fitur Baru

  • Ekstensi collection-ktx telah dimigrasikan ke artefak koleksi utama, androidx.collection:collection. Perubahan ini membuat ekstensi -ktx yang sudah ada dapat diakses oleh pengguna Kotlin tanpa memerlukan dependensi -ktx, sambil tetap mempertahankan kompatibilitas untuk pengguna yang ada. Mempertahankan ekstensi ini dalam artefak -ktx terpisah tidak lagi bermanfaat karena artefak utama telah dipindahkan ke Kotlin. (I6eef2)

Perubahan API

  • ArraySet sekarang memperluas AbstractMutableCollection dan tidak lagi secara langsung menerapkan antarmuka Collection. (If6da0, b/230860589)
  • ArraySet telah dikonversikan ke Kotlin. Karena pengetikan yang lebih ketat, beberapa panggilan Kotlin mungkin tidak lagi dikompilasi. (Id68c1, b/230860589)
    • Panggilan berikut memiliki jenis argumen T, bukan T?:
      • ArraySet<T>.contains(null)
      • ArraySet<T>.add(null)
      • ArraySet<T>.remove(null)
    • Panggilan berikut memiliki jenis nilai yang ditampilkan T?, bukan T!:
      • ArraySet<T?>.valueAt(n)
      • ArraySet<T?>.removeAt(n)
      • ArraySet<T?>().iterator().next()
    • Panggilan berikut tidak lagi dapat dilakukan dari Kotlin:
      • set.toArray() - gunakan set.toTypedArray()
      • set.toArray(array) - gunakan set.forEachIndexed(array::set)
  • Menggabungkan konstruktor kelebihan beban untuk SparseArrayCompat sebagai argumen opsional bagi pengguna Kotlin. (If8407, b/227474719)
  • Menghapus sintaksis operator untuk SparseArrayCompat.get(key, defaultValue). Perlu diketahui bahwa hal ini masih memungkinkan sintaksis operator untuk .get(key), tetapi lebih menyelaraskan platform API SparseArrayCompat dengan class lain di library ini. (I9a38d)
  • Memigrasikan ekstensi LongSparseArray ke artefak utama, androidx.collection:collection. Perubahan ini membuat ekstensi -ktx yang sudah ada dapat diakses oleh pengguna Kotlin tanpa memerlukan dependensi -ktx, sambil tetap mempertahankan kompatibilitas untuk pengguna yang ada. Mempertahankan ekstensi ini dalam artefak -ktx terpisah tidak lagi bermanfaat karena artefak utama telah dipindahkan ke Kotlin. (I8659a)
  • Mengonversi LongSparseArray ke Kotlin. Perubahan ini menambahkan nullity eksplisit ke jenisnya, yang merupakan perubahan kompatibel biner, tetapi dapat menyebabkan sumber tidak kompatibel. Khususnya: * .isEmpty tidak dapat lagi diakses sebagai properti, properti tersebut harus diakses sebagai panggilan fungsi di Kotlin - .isEmpty() (Idfd0f)
  • Mengonversi SimpleArrayMap ke Kotlin. Perubahan ini memperkenalkan beberapa perubahan yang tidak kompatibel, sebagai hasil dari interop Java-Kotlin dan kemampuan untuk menentukan dengan benar jenis nullity dalam sumber.
    • API pribadi paket, .mSize, .mArray, .mHashes, .indexOf(), .indexOfNull(), dan .indexOfValue(), dijadikan pribadi - secara teknis ini adalah perubahan tidak kompatibel biner, tetapi mencerminkan visibilitas yang diinginkan dari kolom ini, dan ini hasil paling mendekati yang dapat dicapai di Kotlin karena tidak menyertakan cara untuk menentukan visibilitas pribadi paket.
    • Nullity beberapa jenis sekarang ditentukan dengan benar, metode yang terpengaruh adalah: .getOrDefault, .keyAt, .valueAt, .setValueAt, .put, .putIfAbsent, .removeAt, .replace.
    • Untuk pengguna Kotlin, .isEmpty() kini hanya tersedia sebagai fungsi, bukan melalui akses properti. (I271b7, b/182813986)
  • Mengonversi CircularArray ke Kotlin. Perubahan penting:

    • Memperbaiki nullity generiknya menjadi non-null, yang sebelumnya tidak mungkin untuk dideklarasikan, tetapi diterapkan di semua API publiknya.
    • Karena interop Java Kotlin, sebelumnya telah dimungkinkan untuk mengakses metode tertentu sebagai properti atau fungsi. Namun, untuk mengurangi duplikasi sekaligus mempertahankan kompatibilitas biner, Anda perlu menghapusnya, yang merupakan perubahan yang tidak kompatibel dengan sumber. Panggilan yang terpengaruh adalah: .isEmpty, .getLast(), dan .getFirst(). (Ifffac)
  • Mengonversi CircularIntArray ke Kotlin. Karena interop Java Kotlin, sebelumnya telah dimungkinkan untuk mengakses metode tertentu sebagai properti atau fungsi. Namun, untuk mengurangi duplikasi sekaligus mempertahankan kompatibilitas biner, Anda perlu menghapusnya, yang merupakan perubahan yang tidak kompatibel dengan sumber. Panggilan yang terpengaruh adalah: .isEmpty, .getLast(), dan .getFirst(). (Ie36ce)

  • Mengonversi LruCache ke Kotlin (Ia2f19)

  • Mengonversi SparseArrayCompat ke Kotlin. (If6fe8)

    Perubahan kecil pada perilaku ditambahkan ke SparseArrayCompat.valueAt(), yang tidak lagi salah menampilkan null untuk panggilan tidak diinisialisasi yang di luar batasan size(), tetapi dalam kapasitas awal yang disediakan.

    Perubahan ini juga memasukkan nullity yang benar untuk beberapa jenis yang sebelumnya tidak ada.

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

Versi 1.2.0

Versi 1.2.0

1 Desember 2021

androidx.collection:collection:1.2.0 dan androidx.collection:collection-ktx:1.2.0 dirilis. Versi 1.2.0 berisi commit ini.

Perubahan penting sejak 1.1.0

  • Menambahkan konstruktor array ke ArraySet. (Id7f19)
  • Menyesuaikan entrySet() agar mematuhi API dengan mengimplementasikan entrySet().toArray(), remove(), removeAll(), dan retainAll(), serta menghapus implementasi entrySet().addAll() (I5d505)

Versi 1.2.0-rc01

17 November 2021

androidx.collection:collection:1.2.0-rc01 dan androidx.collection:collection-ktx:1.2.0-rc01 dirilis. Versi 1.2.0-rc01 berisi commit ini.

Perubahan API

  • Tidak ada perubahan dari versi beta sebelumnya.

Versi 1.2.0-beta01

13 Oktober 2021

androidx.collection:collection:1.2.0-beta01 dan androidx.collection:collection-ktx:1.2.0-beta01 dirilis. Versi 1.2.0-beta01 berisi commit ini.

Perbaikan Bug

  • Menyesuaikan entrySet() agar mematuhi API dengan mengimplementasikan entrySet().toArray(), remove(), removeAll(), dan retainAll(), serta menghapus implementasi entrySet().addAll() (I5d505)

Versi 1.2.0-alpha01

16 Desember 2020

androidx.collection:collection:1.2.0-alpha01 dan androidx.collection:collection-ktx:1.2.0-alpha01 dirilis. Versi 1.2.0-alpha01 berisi commit ini.

Perubahan API

  • Menambahkan konstruktor array ke ArraySet. (Id7f19)

Versi 1.1.0

Versi 1.1.0

5 Juni 2019

androidx.collection:collection:1.1.0 dan androidx.collection:collection-ktx:1.1.0 dirilis. Commit yang disertakan dalam versi 1.1.0 dapat dilihat di sini.

Berikut adalah ringkasan perubahan dari 1.0.0 hingga 1.1.0:

Fitur baru

  • Menggunakan implementasi yang lebih efisien untuk fungsi contains dan isNotEmpty dalam artefak 'collection-ktx'. (aosp/866529)

Perubahan API

  • Menambahkan putIfAbsent ke LongSparseArray, SimpleArrayMap, dan SparseArrayCompat (aosp/772608)
  • Menambahkan getOrDefault ke SimpleArrayMap (aosp/772607)
  • Menambahkan remove dua argumen ke LongSparseArray, SimpleArrayMap, dan SparseArrayCompat. Menghentikan penggunaan ekstensi KTX yang terkait untuk fungsionalitas ini. (aosp/772482)
  • Menambahkan replace dua argumen ke LongSparseArray, SimpleArrayMap, dan SparseArrayCompat (aosp/772483)
  • Menambahkan replace tiga argumen ke LongSparseArray, SimpleArrayMap, dan SparseArrayCompat (aosp/772484 )
  • Menghentikan penggunaan metode delete yang redundan. Metode remove menawarkan API dan fungsionalitas yang sama serta cocok dengan API yang digunakan oleh Maps tak terspesialisasi. (aosp/866053)

Perbaikan bug

  • Mengubah SimpleArrayMap untuk menyinkronkan cache global internalnya yang terdiri dari array di SimpleArrayMap.class, bukan ArrayMap.class. Perubahan ini memastikan bahwa jika Anda hanya menggunakan SimpleArrayMap, ArrayMap dapat dihapus dengan alat penyingkatan kode. (aosp/934557)

Versi 1.1.0-rc01

7 Mei 2019

androidx.collection:collection:1.1.0-rc01 dan androidx.collection:collection-ktx:1.1.0-rc01 dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.

Fitur baru

  • Menggunakan implementasi yang lebih efisien untuk fungsi contains dan isNotEmpty dalam artefak 'collection-ktx'. (aosp/866529)

Versi 1.1.0-beta01

3 April 2019

androidx.collection:collection:1.1.0-beta01 dan androidx.collection:collection-ktx:1.1.0-beta01 dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.

Perubahan API

  • Metode yang dalam catatan rilis alpha03 dikatakan mengalami perubahan nilai @RestrictTo telah dihapus. Metode tersebut tidak digunakan oleh library AndroidX mana pun (sekarang atau sebelumnya) dan tidak menawarkan fungsionalitas apa pun yang tidak disertakan dalam API publik.

Perbaikan bug

  • Mengubah SimpleArrayMap untuk menyinkronkan cache global internalnya yang terdiri dari array di SimpleArrayMap.class, bukan ArrayMap.class. Perubahan ini memastikan bahwa jika Anda hanya menggunakan SimpleArrayMap, ArrayMap dapat dihapus dengan alat penyingkatan kode. (aosp/934557)

Versi 1.1.0-alpha03

13 Maret 2019

androidx.collection:collection:1.0.0-alpha03 dan androidx.collection:collection-ktx:1.0.0-alpha03 dirilis. Daftar lengkap commit yang disertakan dalam versi ini dapat dilihat di sini.

Perubahan API

  • Metode di ArraySet yang sebelumnya ditandai @RestrictTo(LIBRARY_GROUP) diubah ke @RestrictTo(LIBRARY_GROUP_PREFIX). Perubahan ini ditujukan untuk mendukung penggunaan sebelumnya oleh library AndroidX lain yang sekarang berada di ID grup Maven berbeda. Metode ini akan dipublikasikan atau dihapus dalam 1.1.0-alpha04 karena library AndroidX lainnya tidak boleh mendapatkan API khusus yang tidak dimiliki developer lain.

Versi 1.1.0-alpha02

30 Januari 2019

androidx.collection:collection 1.1.0-alpha02 dan androidx.collection:collection-ktx 1.1.0-alpha02 dirilis.

Perubahan API

  • Menghentikan penggunaan metode delete yang redundan. Metode remove menawarkan API dan fungsionalitas yang sama serta cocok dengan API yang digunakan oleh Maps tak terspesialisasi. (aosp/866053)

Versi 1.1.0-alpha01

3 Desember 2018

Perubahan API

  • Menambahkan putIfAbsent ke LongSparseArray, SimpleArrayMap, dan SparseArrayCompat (aosp/772608)
  • Menambahkan getOrDefault ke SimpleArrayMap (aosp/772607)
  • Menambahkan remove dua argumen ke LongSparseArray, SimpleArrayMap, dan SparseArrayCompat. Menghentikan penggunaan ekstensi KTX yang terkait untuk fungsionalitas ini. (aosp/772482)
  • Menambahkan replace dua argumen ke LongSparseArray, SimpleArrayMap, dan SparseArrayCompat (aosp/772483)
  • Menambahkan replace tiga argumen ke LongSparseArray, SimpleArrayMap, dan SparseArrayCompat (aosp/772484 )