Collection

  
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
4 de septiembre de 2024 1.4.3 - - 1.5.0-alpha01

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.3"
    implementation "androidx.collection:collection:$collection_version"
}

Kotlin

dependencies {
    val collection_version = "1.4.3"
    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.5

Versión 1.5.0-alpha01

4 de septiembre de 2024

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

Cambios en la API

  • OrderedScatterSet es una colección nueva ordenada y sin asignación. (Ic4178)
  • SieveCache es un nuevo reemplazo sin asignación de LruCache que ofrece mejores características de proporción de hits. (I50a17).
  • Se expuso la representación interna de packedValue para IntIntPair y FloatFloatPair. (Ifeb75, b/331853566).
  • Agregar acceso al array de contenido en colecciones de listas. (I899d5, b/333903173).
  • Agrega DoubleList, una estructura de datos similar a una lista optimizada para valores dobles. (Ia10d1, b/315127635).

Correcciones de errores

  • La biblioteca de colecciones se trasladará a Kotlin 1.9. (I0782f)
  • Optimiza muchas de las colecciones para que sean más eficientes. (Ic0566).

Versión 1.4

Versión 1.4.3

7 de agosto de 2024

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

Correcciones de errores

  • Se corrigió un daño que podía ocurrir en ScatterMap, ScatterSet y sus variantes primitivas. (I38a4a, b/352560465).
  • Optimizaciones de rendimiento. En particular:
    • Reemplaza las llamadas a check() y required() por variantes que no arrojan excepciones intercaladas. Esto reduce el tamaño final del objeto binario y, lo que es más importante, alivia un poco la presión de la caché i.
    • Se mejoró removeDeletedMarkers() en la "distribución" una familia de colecciones. La nueva versión borra los marcadores borrados de 8 marcadores a la vez y omite las escrituras más costosas en el proceso. (Ic0566).

Versión 1.4.2

24 de julio de 2024

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

Nuevas funciones

  • Incluye objetivos multiplataforma adicionales de Kotlin: watchos, tvos y linuxArm64. (b/352543988).

Versión 1.4.1

10 de julio de 2024

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

Correcciones de errores

  • Eliminar las lápidas eliminadas del mapa/conjunto al cambiar el tamaño (7a996c5, b/345960092).

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 boxing:

  • MutableScatterMap y ScatterMap - Clases con MutableMap y API similar a un mapa
  • MutableScatterSet y ScatterSet - Clases con MutableSet y API de configuración similar
  • MutableObjectList y ObjectList - Clases con MutableList y 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 está cubierta por 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ó un error en el que ListIterator configuraba valores en ObjectList que podían 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ó sobrecarga para put, que muestra el valor anterior cuando se reemplaza en todas las colecciones primitivas, como FloatFloatMap.
  • Convierte los métodos removeIf en colecciones primitivas, 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 una sobrecarga de asignación baja y un alto rendimiento:

  • MutableScatterMap y ScatterMap - Clases con MutableMap y API similar a un mapa
  • MutableScatterSet y ScatterSet - Clases con MutableSet y API de configuración similar
  • MutableObjectList y ObjectList - Clases con MutableList y API similar a una lista

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

  • Mutable[Int|Float|Long]List: Clases con una API similar a MutableList<Int|Float|Long>. El [Int|Float|Long]List de solo lectura también existe. Por ejemplo, los números enteros pueden contenerse en un IntList.
  • Mutable[Int|Float|Long]Set: Clases con una API similar a MutableSet<Int|Float|Long>. El [Int|Float|Long]Set de solo lectura también existe. Por ejemplo, los números enteros pueden contenerse en 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>. El [Int|Float|Long|Object][Int|Float|Long|Object]Map de solo lectura también existe. 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 está cubierta por 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 aún son experimentales, pero decidimos combinar las versiones para que los desarrolladores puedan probarlas con mayor facilidad.
  • Todo el código fuente se migró a Kotlin. Como parte de este cambio, muchas APIs ahora se escriben correctamente en cuanto a nulidad, y algunos miembros privados de paquetes se convirtieron en internal. Hay una lista de cambios exactos disponible en las notas de la versión secundaria de la versión 1.3.x que aparecen a continuación.
  • Junto con la migración de Kotlin, se combinó collection-ktx con el artefacto principal de la colección. Puedes descartar de forma segura cualquier dependencia en collection:collection-ktx y reemplazarla por 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 objetivos 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 aún son experimentales, pero decidimos combinar las versiones para que los desarrolladores puedan probarlas con mayor facilidad.

Cambios en la API

  • ArraySet ahora implementa MutableCollections en lugar de AbstractMutableCollection para permitir una implementación de toArray con mayor eficiencia de memoria. (I1ac32)

Correcciones de errores

  • Ahora ArraySet.toArray solo está disponible en JVM, ya que siempre se incluyó solo por compatibilidad con Java. Por lo general, los usuarios de Kotlin deberían usar los asistentes .toTypedArray de stdlib, que proporcionan exactamente la misma funcionalidad con seguridad de tipo adicional. (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

Se lanzaron 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).