Collection

  
Réduisez l'impact sur la mémoire des collections nouvelles et existantes de petite taille.
Dernière mise à jour Version stable Version finale Version bêta Version alpha
24 janvier 2024 1.4.0 - - -

Déclarer des dépendances

Pour ajouter une dépendance à Collection, vous devez ajouter le dépôt Maven de Google à votre projet. Pour en savoir plus, consultez la section Dépôt Maven de Google.

Ajoutez les dépendances des artefacts dont vous avez besoin dans le fichier build.gradle de votre application ou module :

Groovy

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

Kotlin

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

Pour en savoir plus sur les dépendances, consultez la page Ajouter des dépendances de compilation.

Commentaires

Vos commentaires nous aident à améliorer Jetpack. N'hésitez pas à nous contacter si vous découvrez de nouveaux problèmes ou si vous avez des idées pour améliorer cette bibliothèque. Veuillez consulter les problèmes existants de cette bibliothèque avant d'en signaler un nouveau. Vous pouvez ajouter votre vote à un problème existant en cliquant sur le bouton en forme d'étoile.

Signaler un nouveau problème

Pour en savoir plus, consultez la documentation sur l'outil Issue Tracker.

Version 1.4

Version 1.4.0

24 janvier 2024

Publication d'androidx.collection:collection-*:1.4.0. Liste des commits de la version 1.4.0

Changements importants depuis la version 1.3.0

Ajout de collections très efficaces pour le stockage des primitives sans mise en forme:

  • MutableScatterMap et ScatterMap : classes avec MutableMap et une API semblable à une carte
  • MutableScatterSet et ScatterSet : classes avec MutableSet et une API de type Set-like
  • MutableObjectList et ObjectList : classes avec MutableList et API de type liste

Par exemple, un mappage avec une clé entière et une valeur de type de référence est un IntObjectMap<T>. Une carte avec une clé longue et une valeur flottante est un LongFloatMap. Il n'existe aucune version portant le nom ObjectObjectMap, car cette version est couverte par ScatterMap/MutableScatterMap.

Version 1.4.0-rc01

10 janvier 2024

Publication d'androidx.collection:collection-*:1.4.0-rc01 sans aucune modification. Liste des commits de la version 1.4.0-rc01

Version 1.4.0-beta02

29 novembre 2023

Publication d'androidx.collection:collection-*:1.4.0-beta02. Liste des commits de la version 1.4.0-beta02

Nouvelles fonctionnalités

  • Amélioration des performances de FloatFloatPair. (If5537).

Correction de bugs

  • L'itérateur ScatterMap.asMap() renvoie désormais de nouvelles instances. (I28932, b/310365754)

Version 1.4.0-beta01

15 novembre 2023

Publication d'androidx.collection:collection-*:1.4.0-beta01. Liste des commits de la version 1.4.0-beta01

Correction de bugs

  • Correction d'un problème de définition incorrecte de valeurs dans ObjectList par ListIterator, qui pouvait entraîner un plantage en raison de IndexOutOfBoundsException. (I3bd8a, b/307049391).

Version 1.4.0-alpha02

18 octobre 2023

Publication d'androidx.collection:collection-*:1.4.0-alpha02. Liste des commits de la version 1.4.0-alpha02

Modifications apportées à l'API

  • Ajout d'une surcharge pour put, qui renvoie la valeur précédente lorsqu'elle est remplacée par toutes les collections primitives, telles que FloatFloatMap.
  • Conversion des méthodes removeIf sur des collections primitives, telles que MutableFloatFloatMap, en méthodes intégrées. Cela garantit que le lambda de removeIf n'est pas alloué.

Version 1.4.0-alpha01

4 octobre 2023

Publication d'androidx.collection:collection-*:1.4.0-alpha01. Liste des commits de la version 1.4.0-alpha01.

Nouvelles fonctionnalités

De nouvelles collections très efficaces ont été ajoutées, mais avec de faibles coûts d'allocation et de hautes performances:

  • MutableScatterMap et ScatterMap : classes avec MutableMap et une API semblable à une carte
  • MutableScatterSet et ScatterSet : classes avec MutableSet et une API de type Set-like
  • MutableObjectList et ObjectList : classes avec MutableList et API de type liste

Ajout de collections très efficaces pour le stockage des primitives sans mise en forme:

  • Mutable[Int|Float|Long]List : classes avec une API de type MutableList<Int|Float|Long>. Le [Int|Float|Long]List en lecture seule existe également. Par exemple, un IntList peut contenir des entiers.
  • Mutable[Int|Float|Long]Set : classes avec une API de type MutableSet<Int|Float|Long>. Le [Int|Float|Long]Set en lecture seule existe également. Par exemple, des entiers peuvent figurer dans un IntSet.
  • Mutable[Int|Float|Long|Object][Int|Float|Long|Object]Map : classes avec une API de type Mutable<Int|Float|Long,T, Int|Float|Long|T>. Le [Int|Float|Long|Object][Int|Float|Long|Object]Map en lecture seule existe également. Par exemple, un mappage avec une clé entière et une valeur de type de référence est un IntObjectMap<T>. Une carte avec une clé longue et une valeur flottante est un LongFloatMap. Il n'existe aucune version portant le nom ObjectObjectMap, car cette version est couverte par ScatterMap/MutableScatterMap.

Version 1.3.0

Version 1.3.0

4 octobre 2023

Publication d'androidx.collection:collection-*:1.3.0. Liste des commits de la version 1.3.0

Changements importants depuis la version 1.2.0

  • Vous pouvez désormais utiliser des collections dans les projets multiplateformes Kotlin. Notez que les cibles des collections non Android sont encore au stade expérimental, mais nous avons décidé de fusionner les versions pour permettre aux développeurs de les essayer plus facilement.
  • Toute la source a été migrée vers Kotlin. Dans le cadre de ce changement, de nombreuses API sont désormais correctement typées pour la valeur nulle, et quelques membres privés de package sont devenus internal. Vous trouverez la liste des modifications exactes ci-dessous dans les notes de version mineures de la version 1.3.x.
  • Parallèlement à la migration Kotlin, collection-ktx a été fusionné avec l'artefact principal de la collection. Vous pouvez supprimer en toute sécurité toutes les dépendances de collection:collection-ktx au profit de collection:collection, car collection-ktx est désormais vide.

Version 1.3.0-rc01

6 septembre 2023

Publication d'androidx.collection:collection-*:1.3.0-rc01 sans aucune modification. Liste des commits de la version 1.3.0-rc01

Version 1.3.0-beta01

9 août 2023

Publication d'androidx.collection:collection-*:1.3.0-beta01. Liste des commits de la version 1.3.0-beta01

Version 1.3.0-alpha04

24 mars 2023

Publication d'androidx.collection:collection-*:1.3.0-alpha04.

Correction de bugs

  • Suppression des contraintes de dépendance des artefacts Maven pour contourner un problème de compilation dans les cibles natives Kotlin. (b/274786186, KT-57531)

Version 1.3.0-alpha03

22 mars 2023

Publication d'androidx.collection:collection-*:1.3.0-alpha03. Liste des commits de la version 1.3.0-alpha03

Nouvelles fonctionnalités

  • Vous pouvez désormais utiliser des collections dans les projets KMM. Notez que les cibles des collections non-Android sont encore au stade expérimental, mais que nous avons décidé de fusionner les versions pour permettre aux développeurs de les essayer plus facilement.

Modifications apportées à l'API

  • ArraySet implémente désormais MutableCollections au lieu de AbstractMutableCollection pour permettre une implémentation de toArray plus efficace en termes de mémoire. (I1ac32)

Correction de bugs

  • ArraySet.toArray n'est désormais disponible que sur la JVM, car il n'a toujours été inclus que pour la compatibilité avec Java. Les utilisateurs de Kotlin doivent généralement utiliser les assistants .toTypedArray de stdlib, qui offrent exactement la même fonctionnalité avec une sécurité de typage renforcée. (I2c59b).

Version 1.3.0-alpha02

27 juillet 2022

Publication d'androidx.collection:collection:1.3.0-alpha02 et d'androidx.collection:collection-ktx:1.3.0-alpha02. Liste des commits de la version 1.3.0-alpha02

Modifications apportées à l'API

  • Disponibilité de SparseArrayCompat pour les plates-formes autres que jvm à partir de l'artefact commun (Ic9bd0, b/219589118, b/228347315).
  • Disponibilité de CircularIntArray pour les plates-formes autres que jvm à partir de l'artefact commun (I3d8ef, b/228344943).
  • Disponibilité de LongSparseArray pour les plates-formes autres que jvm à partir de l'artefact commun (I73149, b/228347315).

Version 1.3.0-alpha01

29 juin 2022

Publication d'androidx.collection:collection:1.3.0-alpha01 et d'androidx.collection:collection-ktx:1.3.0-alpha01. Liste des commits de la version 1.3.0-alpha01.

Nouvelles fonctionnalités

  • Migration des extensions collection-ktx vers androidx.collection:collection, le principal artefact des collections. Ce changement rend les extensions -ktx préexistantes accessibles aux utilisateurs du Kotlin sans avoir besoin de la dépendance -ktx, tout en conservant la compatibilité pour les utilisateurs existants. Il n'est plus utile de conserver ces extensions dans un artefact -ktx distinct, car l'artefact principal a été déplacé vers Kotlin (I6eef2).

Modifications apportées à l'API

  • Extension d'AbstractMutableCollection par ArraySet, qui n'implémente plus directement l'interface Collection (If6da0, b/230860589).
  • Conversion d'ArraySet en Kotlin. En raison d'une rédaction plus stricte, il est possible que certains appels Kotlin ne soient plus compilés (Id68c1, b/230860589).
    • Remplacement du type d'argument T? par T pour les appels suivants :
      • ArraySet<T>.contains(null)
      • ArraySet<T>.add(null)
      • ArraySet<T>.remove(null)
    • Remplacement du type renvoyé T! par T? pour les appels suivants :
      • ArraySet<T?>.valueAt(n)
      • ArraySet<T?>.removeAt(n)
      • ArraySet<T?>().iterator().next()
    • Les appels suivants ne sont plus possibles à partir du Kotlin :
      • set.toArray() : utilisez set.toTypedArray()
      • set.toArray(array) : utilisez set.forEachIndexed(array::set)
  • Fusion du constructeur surchargé de SparseArrayCompat en tant qu'argument facultatif pour les utilisateurs du Kotlin (If8407, b/227474719).
  • Suppression de la syntaxe d'opérateur pour SparseArrayCompat.get(key, defaultValue).. Notez que la syntaxe d'opérateur pour .get(key) est toujours autorisée, mais la surface d'API de SparseArrayCompat correspond mieux aux autres classes de cette bibliothèque (I9a38d).
  • Migration des extensions LongSparseArray vers l'artefact principal, androidx.collection:collection. Ce changement rend les extensions -ktx préexistantes accessibles aux utilisateurs du Kotlin sans avoir besoin de la dépendance -ktx, tout en conservant la compatibilité pour les utilisateurs existants. Il n'est plus utile de conserver ces extensions dans un artefact -ktx distinct, car l'artefact principal a été déplacé vers Kotlin (I8659a).
  • Conversion de LongSparseArray en Kotlin. Cette modification ajoute une valeur nulle à ses types, le rendant ainsi compatible avec le binaire, mais cela peut entraîner des incompatibilités de source. Notamment, * .isEmpty n'est plus accessible en tant que propriété, mais en tant qu'appel de fonction en Kotlin : .isEmpty() (Idfd0f).
  • Conversion de SimpleArrayMap en Kotlin. Ce changement introduit quelques modifications incompatibles, résultant de l'interopérabilité de Java avec le Kotlin et de la possibilité de définir correctement la valeur nulle des types dans la source.
    • Privatisation des API privées .mSize, .mArray, .mHashes, .indexOf(), .indexOfNull() et .indexOfValue(). Techniquement, il s'agit d'une modification incompatible avec le binaire, mais elle reflète la visibilité prévue de ces champs et il n'est pas possible de s'en rapprocher davantage en Kotlin, qui ne permet pas de spécifier une visibilité privée pour le paquet.
    • Correction de la valeur nulle de certains types pour les méthodes .getOrDefault, .keyAt, .valueAt, .setValueAt, .put, .putIfAbsent, .removeAt et .replace.
    • Pour les utilisateurs de Kotlin, .isEmpty() n'est désormais disponible qu'en tant que fonction plutôt que via l'accès à la propriété (I271b7, b/182813986).
  • Conversion de CircularArray en Kotlin. Changements notables :

    • Correction et remplacement de la valeur nulle de ses valeurs génériques par une valeur non nulle, qui était auparavant impossible à déclarer, mais qui était appliquée dans toutes ses API publiques.
    • En raison de l'interopérabilité de Java avec le Kotlin, il était auparavant possible d'accéder à certaines méthodes à la fois en tant que propriétés ou fonctions. Cependant, pour réduire la duplication tout en conservant la compatibilité binaire, il était nécessaire de les supprimer, ce qui n'est pas compatible avec la source. Les appels concernés sont : .isEmpty, .getLast() et .getFirst() (Ifffac).
  • Conversion de CircularIntArray en Kotlin. En raison de l'interopérabilité de Java avec le Kotlin, il était auparavant possible d'accéder à certaines méthodes à la fois en tant que propriétés ou fonctions. Cependant, pour réduire la duplication tout en conservant la compatibilité binaire, il était nécessaire de les supprimer, ce qui n'est pas compatible avec la source. Les appels concernés sont : .isEmpty, .getLast() et .getFirst() (Ie36ce).

  • Conversion de LruCache en Kotlin (Ia2f19).

  • Conversion de SparseArrayCompat en Kotlin (If6fe8).

    Le comportement de SparseArrayCompat.valueAt() a été légèrement modifié. Il ne renvoie plus null de manière erronée pour les appels non initialisés hors des limites de size(), mais dans la capacité initiale fournie.

    Cette modification introduit également une valeur nulle pour certains types précédemment manquants.

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

Version 1.2.0

Version 1.2.0

1er décembre 2021

Publication d'androidx.collection:collection:1.2.0 et d'androidx.collection:collection-ktx:1.2.0. Liste des commits de la version 1.2.0

Changements importants depuis la version 1.1.0

  • Ajout d'un constructeur de tableau à ArraySet (Id7f19).
  • Mise en conformité avec l'API d'entrySet() en implémentant entrySet().toArray(), remove(), removeAll() et retainAll(), et en supprimant l'implémentation d'entrySet().addAll() (I5d505).

Version 1.2.0-rc01

17 novembre 2021

Publication d'androidx.collection:collection:1.2.0-rc01 et d'androidx.collection:collection-ktx:1.2.0-rc01. Liste des commits de la version 1.2.0-rc01.

Modifications apportées à l'API

  • Aucun changement par rapport à la version bêta précédente.

Version 1.2.0-beta01

13 octobre 2021

Publication d'androidx.collection:collection:1.2.0-beta01 et d'androidx.collection:collection-ktx:1.2.0-beta01. Liste des commits de la version 1.2.0-beta01

Correction de bugs

  • Mise en conformité avec l'API d'entrySet() en implémentant entrySet().toArray(), remove(), removeAll() et retainAll(), et en supprimant l'implémentation d'entrySet().addAll() (I5d505).

Version 1.2.0-alpha01

16 décembre 2020

Publication d'androidx.collection:collection:1.2.0-alpha01 et d'androidx.collection:collection-ktx:1.2.0-alpha01. Liste des commits de la version 1.2.0-alpha01

Modifications apportées à l'API

  • Ajout d'un constructeur de tableau à ArraySet (Id7f19).

Version 1.1.0

Version 1.1.0

5 juin 2019

Publication d'androidx.collection:collection:1.1.0 et d'androidx.collection:collection-ktx:1.1.0. Pour consulter les commits de la version 1.1.0, cliquez ici.

Vous trouverez ci-dessous un récapitulatif des différences entre la version 1.0.0 et la version 1.1.0 :

Nouvelles fonctionnalités

  • Implémentation plus efficace pour les fonctions contains et isNotEmpty dans l'artefact "collection-ktx" (aosp/866529).

Modifications apportées à l'API

  • Ajout de putIfAbsent à LongSparseArray, SimpleArrayMap et SparseArrayCompat (aosp/772608).
  • Ajout de getOrDefault à SimpleArrayMap (aosp/772607).
  • Ajout d'une méthode remove à deux arguments à LongSparseArray, SimpleArrayMap et SparseArrayCompat. Abandon des extensions KTX de cette fonctionnalité (aosp/772482).
  • Ajout d'une méthode replace à deux arguments à LongSparseArray, SimpleArrayMap et SparseArrayCompat (aosp/772483).
  • Ajout d'une méthode replace à trois arguments à LongSparseArray, SimpleArrayMap et SparseArrayCompat (aosp/772484).
  • Abandon des méthodes delete redondantes. La méthode remove offre la même API et les mêmes fonctionnalités que l'API utilisée par les Maps non spécialisées (aosp/866053).

Corrections de bugs

  • Modification de SimpleArrayMap pour synchroniser son cache global interne de tableaux sur SimpleArrayMap.class plutôt que sur ArrayMap.class. Ainsi, si vous n'utilisez que SimpleArrayMap, ArrayMap peut être supprimé à l'aide d'outils de minification du code (aosp/934557).

Version 1.1.0-rc01

7 mai 2019

Publication d'androidx.collection:collection:1.1.0-rc01 et d'androidx.collection:collection-ktx:1.1.0-rc01. Les commits inclus dans cette version sont disponibles sur cette page.

Nouvelles fonctionnalités

  • Implémentation plus efficace pour les fonctions contains et isNotEmpty dans l'artefact "collection-ktx" (aosp/866529).

Version 1.1.0-beta01

3 avril 2019

Publication d'androidx.collection:collection:1.1.0-beta01 et d'androidx.collection:collection-ktx:1.1.0-beta01. Les commits inclus dans cette version sont disponibles sur cette page.

Modifications apportées à l'API

  • Suppression de la méthode mentionnée dans les notes de version alpha03 indiquant la modification de sa valeur @RestrictTo. Elle n'était utilisée par aucune bibliothèque AndroidX (actuellement ou par le passé) et ne proposait aucune fonctionnalité qui manquait dans l'API publique.

Corrections de bugs

  • Modification de SimpleArrayMap pour synchroniser son cache global interne de tableaux sur SimpleArrayMap.class plutôt que sur ArrayMap.class. Ainsi, si vous n'utilisez que SimpleArrayMap, ArrayMap peut être supprimé à l'aide d'outils de minification du code (aosp/934557).

Version 1.1.0-alpha03

13 mars 2019

Publication d'androidx.collection:collection:1.0.0-alpha03 et d'androidx.collection:collection-ktx:1.0.0-alpha03. La liste complète des commits inclus dans cette version est disponible sur cette page.

Modifications apportées à l'API

  • Remplacement du marquage @RestrictTo(LIBRARY_GROUP) d'une méthode sur ArraySet par @RestrictTo(LIBRARY_GROUP_PREFIX) pour prendre en charge l'utilisation historique par d'autres bibliothèques AndroidX se trouvant désormais dans des ID de groupe Maven différents. Cette méthode sera soit rendue publique, soit supprimée dans la version 1.1.0-alpha04, car les autres bibliothèques AndroidX ne doivent pas obtenir des API spéciales auxquelles d'autres développeurs n'ont pas accès.

Version 1.1.0-alpha02

30 janvier 2019

Publication d'androidx.collection:collection 1.1.0-alpha02 et d'androidx.collection:collection-ktx 1.1.0-alpha02.

Modifications apportées à l'API

  • Abandon des méthodes delete redondantes. Les méthodes remove offrent la même API et les mêmes fonctionnalités, et correspondent à l'API utilisée par les Maps non spécialisées (aosp/866053).

Version 1.1.0-alpha01

3 décembre 2018

Modifications apportées à l'API

  • Ajout de putIfAbsent à LongSparseArray, SimpleArrayMap et SparseArrayCompat (aosp/772608).
  • Ajout de getOrDefault à SimpleArrayMap (aosp/772607).
  • Ajout d'une méthode remove à deux arguments à LongSparseArray, SimpleArrayMap et SparseArrayCompat. Abandon des extensions KTX de cette fonctionnalité (aosp/772482).
  • Ajout d'une méthode replace à deux arguments à LongSparseArray, SimpleArrayMap et SparseArrayCompat (aosp/772483).
  • Ajout d'une méthode replace à trois arguments à LongSparseArray, SimpleArrayMap et SparseArrayCompat (aosp/772484).