Colección

  
Reduce el impacto de la memoria de las colecciones existentes y nuevas que sean pequeñas.
Actualización más reciente Versión estable Versión potencial Versión beta Versión alfa
24 de enero de 2024 1.4.0 - - -

Cómo declarar dependencias

Para agregar una dependencia en Collection, debes agregar el repositorio Maven de Google a tu proyecto. Consulta el repositorio Maven de Google para obtener más información.

Agrega las dependencias de los artefactos que necesites en el archivo build.gradle de tu app o módulo:

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

Para obtener más información sobre las dependencias, consulta Cómo agregar dependencias de compilación.

Comentarios

Tus comentarios ayudan a mejorar Jetpack. Avísanos si descubres nuevos errores o tienes ideas para mejorar esta biblioteca. Consulta los errores existentes de esta biblioteca antes de crear uno nuevo. Puedes agregar tu voto a un error existente haciendo clic en el botón de la estrella.

Crear un error nuevo

Consulta la documentación sobre la Herramienta de seguimiento de errores para obtener más información.

Versión 1.4

Versión 1.4.0

24 de enero de 2024

Lanzamiento de androidx.collection:collection-*:1.4.0. La versión 1.4.0 contiene estas confirmaciones.

Cambios importantes desde la versión 1.3.0

Se agregaron nuevas colecciones de alta eficiencia para almacenar primitivas sin boxeo:

  • MutableScatterMap y ScatterMap: Clases con MutableMap y una API similar a un mapa
  • MutableScatterSet y ScatterSet: Clases con MutableSet y una API similar a un conjunto
  • MutableObjectList y ObjectList: Clases con MutableList y una API similar a una lista

Por ejemplo, un mapa con una clave de número entero y un valor de tipo de referencia es un IntObjectMap<T>. Un mapa con una clave larga y un valor flotante es un LongFloatMap. No existe una versión con el nombre ObjectObjectMap porque ScatterMap/MutableScatterMap.

Versión 1.4.0-rc01

10 de enero de 2024

Se lanzó androidx.collection:collection-*:1.4.0-rc01 sin cambios. La versión 1.4.0-rc01 contiene estas confirmaciones.

Versión 1.4.0-beta02

29 de noviembre de 2023

Lanzamiento de androidx.collection:collection-*:1.4.0-beta02. La versión 1.4.0-beta02 contiene estas confirmaciones.

Nuevas funciones

  • Se mejoró el rendimiento de FloatFloatPair. (If5537).

Correcciones de errores

  • El iterador ScatterMap.asMap() ahora muestra instancias nuevas (I28932, b/310365754).

Versión 1.4.0-beta01

15 de noviembre de 2023

Lanzamiento de androidx.collection:collection-*:1.4.0-beta01. La versión 1.4.0-beta01 contiene estas confirmaciones.

Correcciones de errores

  • Se corrigió la configuración incorrecta de ListIterator en ObjectList que podía provocar una falla debido a IndexOutOfBoundsException (I3bd8a, b/307049391).

Versión 1.4.0-alpha02

18 de octubre de 2023

Lanzamiento de androidx.collection:collection-*:1.4.0-alpha02. La versión 1.4.0-alpha02 contiene estas confirmaciones.

Cambios en la API

  • Se agregó una sobrecarga para put que muestra el valor anterior cuando se reemplaza en todas las colecciones básicas, como FloatFloatMap
  • Convierte los métodos removeIf de colecciones básicas, como MutableFloatFloatMap, en intercalados. Esto garantiza que no se asigne la lambda para removeIf.

Versión 1.4.0-alpha01

4 de octubre de 2023

Lanzamiento de androidx.collection:collection-*:1.4.0-alpha01. La versión 1.4.0-alpha01 contiene estas confirmaciones.

Nuevas funciones

Se agregaron nuevas colecciones de alta eficiencia que tienen baja sobrecarga de asignación y alto rendimiento:

  • MutableScatterMap y ScatterMap: Clases con MutableMap y una API similar a un mapa
  • MutableScatterSet y ScatterSet: Clases con MutableSet y una API similar a un conjunto
  • MutableObjectList y ObjectList: Clases con MutableList y una API similar a una lista

Se agregaron nuevas colecciones de alta eficiencia para almacenar primitivas sin boxeo:

  • Mutable[Int|Float|Long]List: clases con una API similar a MutableList<Int|Float|Long>. También existe el [Int|Float|Long]List de solo lectura. Por ejemplo, los números enteros pueden contener una IntList.
  • Mutable[Int|Float|Long]Set: clases con una API similar a MutableSet<Int|Float|Long>. También existe el [Int|Float|Long]Set de solo lectura. Por ejemplo, los números enteros pueden contener un IntSet.
  • Mutable[Int|Float|Long|Object][Int|Float|Long|Object]Map: clases con una API similar a Mutable<Int|Float|Long,T, Int|Float|Long|T>. También existe el [Int|Float|Long|Object][Int|Float|Long|Object]Map de solo lectura. Por ejemplo, un mapa con una clave de número entero y un valor de tipo de referencia es un IntObjectMap<T>. Un mapa con una clave larga y un valor flotante es un LongFloatMap. No existe una versión con el nombre ObjectObjectMap porque ScatterMap/MutableScatterMap.

Versión 1.3.0

Versión 1.3.0

4 de octubre de 2023

Lanzamiento de androidx.collection:collection-*:1.3.0. La versión 1.3.0 contiene estas confirmaciones.

Cambios importantes desde 1.2.0

  • Ahora puedes usar colecciones en proyectos multiplataforma de Kotlin. Ten en cuenta que los objetivos de las colecciones que no son de Android todavía son experimentales, pero decidimos combinar versiones para que los desarrolladores puedan probarlas más fácilmente.
  • Se migró todo el código fuente a Kotlin. Como parte de este cambio, muchas APIs ahora tienen el tipo correcto de nulidad, y algunos miembros privados de paquetes se convirtieron en internal. En las notas de la versión secundaria 1.3.x a continuación, se incluye una lista de los cambios exactos.
  • Junto con la migración de Kotlin, se combinó collection-ktx con el artefacto de colección principal. Puedes descartar de forma segura cualquier dependencia en collection:collection-ktx y priorizar collection:collection, ya que collection-ktx ahora está vacío.

Versión 1.3.0-rc01

6 de septiembre de 2023

Se lanzó androidx.collection:collection-*:1.3.0-rc01 sin cambios. La versión 1.3.0-rc01 contiene estas confirmaciones.

Versión 1.3.0-beta01

9 de agosto de 2023

Lanzamiento de androidx.collection:collection-*:1.3.0-beta01. La versión 1.3.0-beta01 contiene estas confirmaciones.

Versión 1.3.0-alpha04

24 de marzo de 2023

Lanzamiento de androidx.collection:collection-*:1.3.0-alpha04.

Correcciones de errores

  • Se quitaron las restricciones de dependencia de los artefactos de Maven para solucionar un problema de compilación en los destinos nativos de Kotlin (b/274786186, KT-57531).

Versión 1.3.0-alpha03

22 de marzo de 2023

Lanzamiento de androidx.collection:collection-*:1.3.0-alpha03. La versión 1.3.0-alpha03 contiene estas confirmaciones.

Nuevas funciones

  • Ahora puedes usar colecciones en proyectos de KMM. Ten en cuenta que los objetivos de las colecciones que no son de Android todavía son experimentales, pero decidimos combinar versiones para que los desarrolladores puedan probarlas más fácilmente.

Cambios en la API

  • ArraySet ahora implementa MutableCollections en lugar de AbstractMutableCollection para permitir una implementación de toArray más eficiente en términos de memoria (I1ac32).

Correcciones de errores

  • ArraySet.toArray ahora solo está disponible en JVM, ya que siempre se incluyó solo para compatibilidad con Java. En general, los usuarios de Kotlin deberían usar los asistentes .toTypedArray de stdlib, que proporcionan exactamente la misma funcionalidad con mayor seguridad de tipos. (I2c59b).

Versión 1.3.0-alpha02

27 de julio de 2022

Lanzamiento de androidx.collection:collection:1.3.0-alpha02 y androidx.collection:collection-ktx:1.3.0-alpha02. La versión 1.3.0-alpha02 contiene estas confirmaciones.

Cambios en la API

  • SparseArrayCompat ahora está disponible para plataformas que no son jvm desde el artefacto común (Ic9bd0, b/219589118, b/228347315).
  • CircularIntArray ahora está disponible para plataformas que no son jvm desde el artefacto común (I3d8ef, b/228344943).
  • LongSparseArray ahora está disponible para plataformas que no son jvm desde el artefacto común (I73149, b/228347315).

Versión 1.3.0-alpha01

29 de junio de 2022

Lanzamiento de androidx.collection:collection:1.3.0-alpha01 y androidx.collection:collection-ktx:1.3.0-alpha01. La versión 1.3.0-alpha01 contiene estas confirmaciones.

Nuevas funciones

  • Se migraron las extensiones collection-ktx al artefacto de colecciones principal, androidx.collection:collection. Este cambio permite que los usuarios de Kotlin puedan acceder a las extensiones -ktx preexistentes sin necesidad de usar la dependencia -ktx, a la vez que mantienen la compatibilidad con los usuarios existentes. No se recomienda mantener estas extensiones en un artefacto -ktx separado porque el artefacto principal se trasladó a Kotlin (I6eef2).

Cambios en la API

  • ArraySet ahora extiende AbstractMutableCollection y ya no implementa directamente la interfaz Collection (If6da0, b/230860589).
  • Se convirtió ArraySet a Kotlin. Debido a una escritura más estricta, es posible que algunas llamadas a Kotlin ya no se compilen (Id68c1, b/230860589).
    • Las siguientes llamadas tienen el tipo de argumento T, no T?:
      • ArraySet<T>.contains(null)
      • ArraySet<T>.add(null)
      • ArraySet<T>.remove(null)
    • Las siguientes llamadas tienen el tipo de datos que se muestra T?, no T!:
      • ArraySet<T?>.valueAt(n)
      • ArraySet<T?>.removeAt(n)
      • ArraySet<T?>().iterator().next()
    • Las siguientes llamadas ya no son posibles desde Kotlin:
      • set.toArray(): usa set.toTypedArray().
      • set.toArray(array): usa set.forEachIndexed(array::set).
  • Se combinó el constructor sobrecargado de SparseArrayCompat como argumento opcional para los usuarios de Kotlin (If8407, b/227474719).
  • Se quitó la sintaxis del operador para SparseArrayCompat.get(key, defaultValue).. Ten en cuenta que esto sigue permitiendo la sintaxis del operador para .get(key), pero alinea mejor la superficie de la API de SparseArrayCompat con las otras clases de esta biblioteca (I9a38d).
  • Se migraron las extensiones LongSparseArray al artefacto principal de androidx.collection:collection. Este cambio permite que los usuarios de Kotlin puedan acceder a las extensiones -ktx preexistentes sin necesidad de usar la dependencia -ktx, a la vez que mantienen la compatibilidad con los usuarios existentes. No se recomienda mantener estas extensiones en un artefacto -ktx separado porque el artefacto principal se trasladó a Kotlin (I8659a).
  • Se convirtió LongSparseArray en Kotlin. Este cambio agrega nulabilidad explícita a sus tipos, que es un cambio compatible con objetos binarios, pero puede causar incompatibilidades de origen. En particular: Ya no se puede acceder a *.isEmpty como una propiedad; se debe acceder como una llamada a función en Kotlin - .isEmpty() (Idfd0f).
  • Se convirtió SimpleArrayMap en Kotlin. Esta modificación introduce algunos cambios incompatibles como resultado de la interoperabilidad de Java-Kotlin y la capacidad de definir correctamente la nulidad de los tipos en el origen.
    • Las APIs privadas de paquetes (.mSize, .mArray, .mHashes, .indexOf(), .indexOfNull() y .indexOfValue()) se hicieron privadas. Técnicamente, es un cambio binario incompatible, pero refleja la visibilidad prevista de estos campos y es lo más cercano que podemos lograr en Kotlin, ya que no incluye una manera de especificar la visibilidad privada del paquete.
    • La nulidad de algunos tipos ahora está definida correctamente; los métodos afectados son .getOrDefault, .keyAt, .valueAt, .setValueAt,.put, .putIfAbsent, .removeAt y .replace.
    • Para los usuarios de Kotlin, .isEmpty() ahora solo está disponible como función en lugar de acceso a la propiedad (I271b7, b/182813986).
  • Se convirtió CircularArray en Kotlin. Cambios importantes:

    • Se corrigió la nulidad de sus genéricos para que no sean nulos, que antes era imposible de declarar, pero se aplicaba en todas sus APIs públicas.
    • Debido a la interoperabilidad de Java con Kotlin, antes era posible acceder a ciertos métodos como propiedades o funciones. Sin embargo, para reducir la duplicación y, al mismo tiempo, mantener la compatibilidad binaria, fue necesario quitarlas, ya que se trata de un cambio incompatible con la fuente. Las llamadas afectadas son las siguientes: .isEmpty, .getLast() y .getFirst() (Ifffac).
  • Se convirtió CircularIntArray en Kotlin. Debido a la interoperabilidad de Java con Kotlin, antes era posible acceder a ciertos métodos como propiedades o funciones. Sin embargo, para reducir la duplicación y, al mismo tiempo, mantener la compatibilidad binaria, fue necesario quitarlas, ya que se trata de un cambio incompatible con la fuente. Las llamadas afectadas son las siguientes: .isEmpty, .getLast() y .getFirst() (Ie36ce).

  • Se convirtió LruCache en Kotlin (Ia2f19).

  • Se convirtió SparseArrayCompat en Kotlin (If6fe8).

    Se agregó un pequeño cambio de comportamiento a SparseArrayCompat.valueAt(), que ya no muestra null de forma incorrecta para las llamadas no inicializadas fuera de los límites de size(), pero dentro de la capacidad inicial proporcionada.

    Este cambio también introduce la nulabilidad correcta para algunos tipos que faltaban anteriormente.

    • .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ón 1.2.0

Versión 1.2.0

1 de diciembre de 2021

Lanzamiento de androidx.collection:collection:1.2.0 y androidx.collection:collection-ktx:1.2.0. La versión 1.2.0 contiene estas confirmaciones.

Cambios importantes desde la versión 1.1.0

  • Agrega un constructor de array a ArraySet (Id7f19).
  • Se implementaron entrySet().toArray(), remove(), removeAll() y retainAll(), y se quitó la implementación de entrySet().addAll() para que la API de entrySet() sea compatible (I5d505).

Versión 1.2.0-rc01

17 de noviembre de 2021

Lanzamiento de androidx.collection:collection:1.2.0-rc01 y androidx.collection:collection-ktx:1.2.0-rc01. La versión 1.2.0-rc01 contiene estas confirmaciones.

Cambios en la API

  • No hay cambios en la versión beta anterior.

Versión 1.2.0-beta01

13 de octubre de 2021

Se lanzaron androidx.collection:collection:1.2.0-beta01 y androidx.collection:collection-ktx:1.2.0-beta01. La versión 1.2.0-beta01 contiene estas confirmaciones.

Correcciones de errores

  • Se implementaron entrySet().toArray(), remove(), removeAll() y retainAll(), y se quitó la implementación de entrySet().addAll() para que la API de entrySet() sea compatible (I5d505).

Versión 1.2.0-alpha01

16 de diciembre de 2020

Lanzamiento de androidx.collection:collection:1.2.0-alpha01 y androidx.collection:collection-ktx:1.2.0-alpha01. La versión 1.2.0-alpha01 contiene estas confirmaciones.

Cambios en la API

  • Agrega un constructor de array a ArraySet (Id7f19)

Versión 1.1.0

Versión 1.1.0

5 de junio de 2019

Lanzamiento de androidx.collection:collection:1.1.0 y androidx.collection:collection-ktx:1.1.0. Para conocer las confirmaciones incluidas en la versión 1.1.0, consulta este artículo.

A continuación, se ofrece un resumen de las diferencias entre las versiones 1.0.0 y 1.1.0:

Nuevas funciones

  • Usa una implementación más eficiente para las funciones contains y isNotEmpty en el artefacto "collection-ktx" (aosp/866529).

Cambios en la API

  • Se agregó putIfAbsent a LongSparseArray, SimpleArrayMap y SparseArrayCompat (aosp/772608).
  • Se agregó getOrDefault a SimpleArrayMap (aosp/772607).
  • Se agregaron dos argumentos remove a LongSparseArray, SimpleArrayMap y SparseArrayCompat. Se deben omitir las extensiones KTX correspondientes para esta funcionalidad. (aosp/772482)
  • Se agregaron dos argumentos replace a LongSparseArray, SimpleArrayMap y SparseArrayCompat (aosp/772483).
  • Se agregaron tres argumentos replace a LongSparseArray, SimpleArrayMap y SparseArrayCompat (aosp/772484).
  • Se dieron de baja los métodos redundantes delete. El método remove ofrece la misma API y funcionalidad, y coincide con la API que utilizan los mapas no especializados. (aosp/866053)

Correcciones de errores

  • Se cambió SimpleArrayMap para sincronizar su caché global interna de arreglos en SimpleArrayMap.class, en lugar de ArrayMap.class. Esto garantiza que si solo usas SimpleArrayMap, se puede quitar ArrayMap mediante herramientas de reducción de código. (aosp/934557)

Versión 1.1.0-rc01

7 de mayo de 2019

Lanzamiento de androidx.collection:collection:1.1.0-rc01 y androidx.collection:collection-ktx:1.1.0-rc01. Para conocer las confirmaciones incluidas en esta versión, consulta este artículo.

Nuevas funciones

  • Usa una implementación más eficiente para las funciones contains y isNotEmpty en el artefacto "collection-ktx" (aosp/866529).

Versión 1.1.0-beta01

3 de abril de 2019

Lanzamiento de androidx.collection:collection:1.1.0-beta01 y androidx.collection:collection-ktx:1.1.0-beta01. Para conocer las confirmaciones incluidas en esta versión, consulta este artículo.

Cambios en la API

  • Se quitó el método mencionado en las notas de la versión alpha03 por haber cambiado su valor de @RestrictTo. No lo utilizó ninguna biblioteca de AndroidX (ni ahora ni antes) y no ofrecía ninguna funcionalidad que faltara en la API pública.

Correcciones de errores

  • Se cambió SimpleArrayMap para sincronizar su caché global interna de arreglos en SimpleArrayMap.class, en lugar de ArrayMap.class. Esto garantiza que si solo usas SimpleArrayMap, se puede quitar ArrayMap mediante herramientas de reducción de código. (aosp/934557)

Versión 1.1.0-alpha03

13 de marzo de 2019

Lanzamiento de androidx.collection:collection:1.0.0-alpha03 y androidx.collection:collection-ktx:1.0.0-alpha03. Para obtener una lista completa de las confirmaciones incluidas en esta versión, consulta este vínculo.

Cambios en la API

  • Un método en ArraySet previamente marcado como @RestrictTo(LIBRARY_GROUP) se cambió a @RestrictTo(LIBRARY_GROUP_PREFIX). El objetivo de este cambio es admitir el uso histórico de otras bibliotecas de AndroidX que ahora están en diferentes ID de grupo de Maven. Este método se publicará o se quitará en la versión 1.1.0-alpha04, porque otras bibliotecas de AndroidX no deberían obtener API especiales que no obtienen otros desarrolladores.

Versión 1.1.0-alpha02

30 de enero de 2019

Lanzamiento de androidx.collection:collection 1.1.0-alpha02 y androidx.collection:collection-ktx 1.1.0-alpha02.

Cambios en la API

  • Se dieron de baja los métodos redundantes delete. Los métodos remove ofrecen la misma API y funcionalidad, y coinciden con la API que utilizan los mapas no especializados. (aosp/866053)

Versión 1.1.0-alpha01

3 de diciembre de 2018

Cambios en la API

  • Se agregó putIfAbsent a LongSparseArray, SimpleArrayMap y SparseArrayCompat (aosp/772608).
  • Se agregó getOrDefault a SimpleArrayMap (aosp/772607).
  • Se agregaron dos argumentos remove a LongSparseArray, SimpleArrayMap y SparseArrayCompat. Se deben omitir las extensiones KTX correspondientes para esta funcionalidad. (aosp/772482)
  • Se agregaron dos argumentos replace a LongSparseArray, SimpleArrayMap y SparseArrayCompat (aosp/772483).
  • Se agregaron tres argumentos replace a LongSparseArray, SimpleArrayMap y SparseArrayCompat (aosp/772484).