Коллекция

Уменьшите влияние на память существующих и новых небольших коллекций.
Последнее обновление Стабильный выпуск Кандидат на выпуск Бета-версия Альфа-релиз
2 октября 2024 г. 1.4.4 - - 1.5.0-альфа03

Объявление зависимостей

Чтобы добавить зависимость от Collection, вы должны добавить в свой проект репозиторий Google Maven. Для получения дополнительной информации прочтите репозиторий Google Maven .

Добавьте зависимости для нужных вам артефактов в файл build.gradle для вашего приложения или модуля:

классный

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

Котлин

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

Дополнительные сведения о зависимостях см. в разделе Добавление зависимостей сборки .

Обратная связь

Ваши отзывы помогают сделать Jetpack лучше. Дайте нам знать, если вы обнаружите новые проблемы или у вас есть идеи по улучшению этой библиотеки. Пожалуйста, ознакомьтесь с существующими проблемами в этой библиотеке, прежде чем создавать новую. Вы можете добавить свой голос к существующей проблеме, нажав кнопку со звездочкой.

Создать новую задачу

Дополнительную информацию см . в документации по системе отслеживания проблем .

Версия 1.5

Версия 1.5.0-альфа03

2 октября 2024 г.

Выпущен androidx.collection:collection-*:1.5.0-alpha03 . Версия 1.5.0-alpha03 содержит эти коммиты .

Изменения API

  • Обновление версии Kotlin до 1.9 ( I1a14c )

Внешний вклад

  • Переслать contains на containsKey . Спасибо, Джейк Уортон! ( I9362b )
  • Добавьте построители контейнеров для коллекций, специализирующихся на скалярах. Спасибо, Джейк Уортон! ( I13179 )

Версия 1.5.0-альфа02

18 сентября 2024 г.

Выпущен androidx.collection:collection-*:1.5.0-alpha02 . Версия 1.5.0-alpha02 содержит эти коммиты .

Изменения API

  • Добавляет поддержку целевой платформы watchosDeviceArm64 . ( I1cc04 , б/364652024 )

Версия 1.5.0-альфа01

4 сентября 2024 г.

Выпущен androidx.collection:collection-*:1.5.0-alpha01 . Версия 1.5.0-alpha01 содержит эти коммиты .

Изменения API

  • OrderedScatterSet — это новая упорядоченная коллекция без выделения ( Ic4178 ).
  • SieveCache — это новая замена LruCache без выделения памяти, которая предлагает лучшие характеристики коэффициента попадания. ( I50a17 )
  • Открыто внутреннее представление packedValue для IntIntPair и FloatFloatPair . ( Ифеб75 , б/331853566 )
  • Добавление доступа к массиву контента в коллекциях списков. ( I899d5 , б/333903173 )
  • Добавьте DoubleList — структуру данных в виде списка, оптимизированную для значений Double. ( Я10д1 , б/315127635 )

Исправления ошибок

  • Библиотека коллекций переходит на Kotlin 1.9 ( I0782f )
  • Оптимизируйте многие коллекции, чтобы они были более эффективными. ( Ic0566 )

Версия 1.4

Версия 1.4.4

18 сентября 2024 г.

Выпущен androidx.collection:collection-*:1.4.4 . Версия 1.4.4 содержит эти коммиты .

Исправления ошибок

  • Обходной путь ArrayIndexOutOfBounds при сортировке пустой коллекции. ( I65245 )

Версия 1.4.3

7 августа 2024 г.

Выпущен androidx.collection:collection-*:1.4.3 . Версия 1.4.3 содержит эти коммиты .

Исправления ошибок

  • Исправлено повреждение, которое могло произойти в ScatterMap , ScatterSet и их примитивных вариантах. ( I38a4a , б / 352560465 )
  • Оптимизация производительности. В частности:
    • Замените вызовы check() и required() вариантами, которые не вызывают встроенных исключений. Это уменьшает окончательный размер двоичного файла и, что более важно, немного снижает нагрузку на i-кэш.
    • Улучшен removeDeletedMarkers() в семействе коллекций scatter. Новая версия очищает удаленные маркеры по 8 маркеров за раз и пропускает более дорогостоящие операции записи. ( Ic0566 )

Версия 1.4.2

24 июля 2024 г.

Выпущен androidx.collection:collection-*:1.4.2 . Версия 1.4.2 содержит эти коммиты .

Новые возможности

  • Включает дополнительные мультиплатформенные цели Kotlin: watchos , tvos , linuxArm64 . ( б/352543988 )

Версия 1.4.1

10 июля 2024 г.

androidx.collection:collection-*:1.4.1 выпущен. Версия 1.4.1 содержит эти коммиты .

Исправления ошибок

  • Удалить удаленные надгробия с карты/набора при изменении размера. ( 7a996c5 , б/345960092 )

Версия 1.4.0

24 января 2024 г.

Выпущен androidx.collection:collection-*:1.4.0 . Версия 1.4.0 содержит эти коммиты.

Важные изменения с версии 1.3.0

Добавлены новые высокопроизводительные коллекции для хранения примитивов без упаковки:

  • MutableScatterMap и ScatterMap — классы с MutableMap и Map-подобным API
  • MutableScatterSet и ScatterSet — классы с MutableSet и Set-подобным API
  • MutableObjectList и ObjectList — классы с MutableList и API, похожим на список

Например, карта с целочисленным ключом и значением ссылочного типа — это IntObjectMap<T> . Карта с длинным ключом и значением с плавающей запятой — это LongFloatMap . Версии с именем ObjectObjectMap не существует, поскольку она покрывается ScatterMap/MutableScatterMap .

Версия 1.4.0-rc01

10 января 2024 г.

androidx.collection:collection-*:1.4.0-rc01 выпущен без изменений. Версия 1.4.0-rc01 содержит эти коммиты.

Версия 1.4.0-бета02

29 ноября 2023 г.

Выпущен androidx.collection:collection-*:1.4.0-beta02 . Версия 1.4.0-beta02 содержит эти коммиты.

Новые возможности

  • Улучшена производительность FloatFloatPair . ( Если5537 )

Исправления ошибок

  • Итератор ScatterMap.asMap() теперь возвращает новые экземпляры ( I28932 , b/310365754 ).

Версия 1.4.0-бета01

15 ноября 2023 г.

androidx.collection:collection-*:1.4.0-beta01 выпущен. Версия 1.4.0-beta01 содержит эти коммиты.

Исправления ошибок

  • Исправлена ​​ошибка, из-за которой ListIterator неправильно устанавливал значения в ObjectList , что могло привести к сбою из-за IndexOutOfBoundsException . ( I3bd8a , б/307049391 )

Версия 1.4.0-альфа02

18 октября 2023 г.

Выпущен androidx.collection:collection-*:1.4.0-alpha02 . Версия 1.4.0-alpha02 содержит эти коммиты.

Изменения API

  • Добавлена ​​перегрузка для put , которая возвращает предыдущее значение при его замене во всех примитивных коллекциях, таких как FloatFloatMap .
  • Преобразуйте методы removeIf в примитивных коллекциях, таких как MutableFloatFloatMap во встроенные. Это гарантирует, что лямбда для removeIf не будет выделена.

Версия 1.4.0-альфа01

4 октября 2023 г.

Выпущен androidx.collection:collection-*:1.4.0-alpha01 . Версия 1.4.0-alpha01 содержит эти коммиты.

Новые возможности

Были добавлены новые высокоэффективные коллекции с низкими накладными расходами и высокой производительностью:

  • MutableScatterMap и ScatterMap — классы с MutableMap и Map-подобным API
  • MutableScatterSet и ScatterSet — классы с MutableSet и Set-подобным API
  • MutableObjectList и ObjectList — классы с MutableList и API, похожим на список

Добавлены новые высокопроизводительные коллекции для хранения примитивов без упаковки:

  • Mutable[Int|Float|Long]List — классы с API, подобным MutableList<Int|Float|Long> . Также существует [Int|Float|Long]List только для чтения. Например, целые числа могут храниться в IntList .
  • Mutable[Int|Float|Long]Set — классы с API, подобным MutableSet<Int|Float|Long> . Также существует [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

4 октября 2023 г.

Выпущен androidx.collection:collection-*:1.3.0 . Версия 1.3.0 содержит эти коммиты.

Важные изменения с версии 1.2.0

  • Теперь вы можете использовать коллекции в мультиплатформенных проектах Kotlin. Обратите внимание, что целевые версии коллекций, отличные от Android, все еще находятся в экспериментальной стадии, но мы решили объединить версии, чтобы разработчикам было легче их опробовать.
  • Весь исходный код перенесен на Kotlin. В рамках этого изменения многие API теперь корректно типизированы для недействительности, а некоторые частные члены пакета стали internal . Список точных изменений доступен в примечаниях к выпуску 1.3.x ниже.
  • Вместе с миграцией Kotlin collection-ktx была объединена с основным артефактом коллекции. Вы можете безопасно отказаться от любых зависимостей от collection:collection-ktx в пользу collection:collection поскольку collection-ktx теперь пуста.

Версия 1.3.0-rc01

6 сентября 2023 г.

androidx.collection:collection-*:1.3.0-rc01 выпущен без изменений. Версия 1.3.0-rc01 содержит эти коммиты.

Версия 1.3.0-бета01

9 августа 2023 г.

Выпущен androidx.collection:collection-*:1.3.0-beta01 . Версия 1.3.0-beta01 содержит эти коммиты.

Версия 1.3.0-альфа04

24 марта 2023 г.

Выпущен androidx.collection:collection-*:1.3.0-alpha04 .

Исправления ошибок

  • Удалены ограничения зависимостей из артефактов Maven для обхода проблемы сборки в Kotlin Native Targets ( b/274786186 , KT-57531 ).

Версия 1.3.0-альфа03

22 марта 2023 г.

androidx.collection:collection-*:1.3.0-alpha03 выпущен. Версия 1.3.0-alpha03 содержит эти коммиты.

Новые возможности

  • Теперь вы можете использовать коллекции в проектах KMM . Обратите внимание, что цели Коллекций, отличные от Android, все еще находятся в экспериментальном режиме, но мы решили объединить версии, чтобы разработчикам было легче их опробовать.

Изменения API

  • ArraySet теперь реализует MutableCollections вместо AbstractMutableCollection , чтобы обеспечить более эффективную реализацию toArray ( I1ac32 ) с использованием памяти.

Исправления ошибок

  • ArraySet.toArray теперь доступен только в JVM, поскольку он всегда был включен только для совместимости с Java. Пользователям Kotlin вместо этого обычно следует использовать хелперы .toTypedArray из stdlib, которые обеспечивают ту же функциональность с дополнительной безопасностью типов. ( I2c59b )

Версия 1.3.0-альфа02

27 июля 2022 г.

Выпущены androidx.collection:collection:1.3.0-alpha02 и androidx.collection:collection-ktx:1.3.0-alpha02 . Версия 1.3.0-alpha02 содержит эти коммиты.

Изменения API

  • SparseArrayCompat теперь доступен для платформ, отличных от JVM, из общего артефакта ( Ic9bd0 , b/219589118 , b/228347315 ).
  • CircularIntArray теперь доступен для платформ, отличных от JVM, из общего артефакта ( I3d8ef , b/228344943 ).
  • LongSparseArray теперь доступен для платформ, отличных от JVM, из общего артефакта ( I73149 , b/228347315 ).

Версия 1.3.0-альфа01

29 июня 2022 г.

Выпущены androidx.collection:collection:1.3.0-alpha01 и androidx.collection:collection-ktx:1.3.0-alpha01 . Версия 1.3.0-alpha01 содержит эти коммиты.

Новые возможности

  • Расширения collection-ktx были перенесены в основной артефакт коллекций androidx.collection:collection . Это изменение делает уже существующие расширения -ktx доступными для пользователей Kotlin без необходимости использования зависимости -ktx, сохраняя при этом совместимость для существующих пользователей. Хранение этих расширений в отдельном артефакте -ktx больше не имеет смысла, поскольку основной артефакт переехал в Kotlin. ( I6eef2 )

Изменения API

  • ArraySet теперь расширяет AbstractMutableCollection и больше не реализует интерфейс Collection напрямую. ( If6da0 , b/230860589 )
  • ArraySet преобразован в Kotlin. Из-за более строгой типизации некоторые вызовы Kotlin могут больше не компилироваться. ( Id68c1 , б/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. ( Если8407 , б/227474719 )
  • Удалить синтаксис оператора для SparseArrayCompat.get(key, defaultValue). Обратите внимание, что это по-прежнему допускает синтаксис оператора для .get(key) , но лучше выравнивает поверхность API SparseArrayCompat с другими классами в этой библиотеке. ( I9a38d )
  • Перенесите расширения LongSparseArray в основной артефакт androidx.collection:collection. Это изменение делает уже существующие расширения -ktx доступными для пользователей Kotlin без необходимости использования зависимости -ktx, сохраняя при этом совместимость для существующих пользователей. Хранение этих расширений в отдельном артефакте -ktx больше не имеет смысла, поскольку основной артефакт переехал в Kotlin. ( I8659a )
  • Преобразуйте LongSparseArray в Kotlin. Это изменение добавляет явное нулевое значение к его типам, что является бинарно-совместимым изменением, но может привести к несовместимости исходного кода. В частности: * .isEmpty больше не доступен как свойство, доступ к нему должен осуществляться как вызов функции в Kotlin — .isEmpty() ( Idfd0f ).
  • Преобразование SimpleArrayMap в Kotlin. Это изменение вносит несколько несовместимых изменений в результате взаимодействия Java-Kotlin и возможности правильно определять недействительность типов в исходном коде.
    • Частные API пакета, .mSize , .mArray , .mHashes , .indexOf() , .indexOfNull() и .indexOfValue() , были сделаны частными — технически это бинарно несовместимое изменение, но оно отражает предполагаемую видимость этих полей. и это самое близкое, чего мы можем достичь в Kotlin, поскольку он не включает в себя способ указать видимость для частного пакета.
    • Недействительность некоторых типов теперь правильно определена, затронуты следующие методы: .getOrDefault , .keyAt , .valueAt , .setValueAt , .put , .putIfAbsent , .removeAt , .replace .
    • Для пользователей Kotlin .isEmpty() теперь доступен только как функция, а не через доступ к свойствам. ( I271b7 , б/182813986 )
  • Преобразование CircularArray в Kotlin. Заметные изменения:

    • Исправляет ненулевое значение своих дженериков, чтобы оно было ненулевым, что раньше было невозможно объявить, но оно применялось во всех его общедоступных API.
    • Благодаря взаимодействию Kotlin с Java ранее к определенным методам можно было получить доступ как к свойствам, так и к функциям. Однако, чтобы уменьшить дублирование и сохранить двоичную совместимость, их пришлось удалить, что является изменением, несовместимым с исходным кодом. Затронутые вызовы: .isEmpty , .getLast() и .getFirst() . ( Иффак )
  • Преобразуйте 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

1 декабря 2021 г.

Выпущены androidx.collection:collection:1.2.0 и androidx.collection:collection-ktx:1.2.0 . Версия 1.2.0 содержит эти коммиты.

Важные изменения с версии 1.1.0

  • Добавьте конструктор массива в ArraySet . ( ID7f19 )
  • Сделайте entrySet() совместимым с API, реализовав entrySet().toArray() , remove() , removeAll() и retainAll() и удалив реализацию entrySet().addAll() ( I5d505 ).

Версия 1.2.0-rc01

17 ноября 2021 г.

Выпущены androidx.collection:collection:1.2.0-rc01 и androidx.collection:collection-ktx:1.2.0-rc01 . Версия 1.2.0-rc01 содержит эти коммиты.

Изменения API

  • Никаких изменений по сравнению с предыдущей бета-версией.

Версия 1.2.0-бета01

13 октября 2021 г.

Выпущены androidx.collection:collection:1.2.0-beta01 и androidx.collection:collection-ktx:1.2.0-beta01 . Версия 1.2.0-beta01 содержит эти коммиты.

Исправления ошибок

  • Сделайте entrySet() совместимым с API, реализовав entrySet().toArray() , remove() , removeAll() и retainAll() и удалив реализацию entrySet().addAll() ( I5d505 ).

Версия 1.2.0-альфа01

16 декабря 2020 г.

Выпущены androidx.collection:collection:1.2.0-alpha01 и androidx.collection:collection-ktx:1.2.0-alpha01 . Версия 1.2.0-alpha01 содержит эти коммиты.

Изменения API

  • Добавьте конструктор массива в ArraySet . ( ID7f19 )

Версия 1.1.0

Версия 1.1.0

5 июня 2019 г.

Выпущены androidx.collection:collection:1.1.0 и androidx.collection:collection-ktx:1.1.0 . Коммиты, включенные в 1.1.0, можно найти здесь .

Ниже приведен краткий обзор изменений с 1.0.0 по 1.1.0:

Новые возможности

  • Используйте более эффективную реализацию функций contains и isNotEmpty в артефакте «collection-ktx». ( аосп/866529 )

Изменения API

  • Добавьте putIfAbsent в LongSparseArray , SimpleArrayMap и SparseArrayCompat ( aosp/772608 ).
  • Добавьте getOrDefault в SimpleArrayMap ( aosp/772607 )
  • Добавьте remove с двумя аргументами в LongSparseArray , SimpleArrayMap и SparseArrayCompat . Устаревшие соответствующие расширения KTX для этой функции. ( аосп/772482 )
  • Добавьте replace с двумя аргументами в LongSparseArray , SimpleArrayMap и SparseArrayCompat ( aosp/772483 ).
  • Добавьте replace с тремя аргументами в LongSparseArray , SimpleArrayMap и SparseArrayCompat ( aosp/772484 ).
  • Устаревшие избыточные методы delete . Метод remove предлагает тот же API и функциональность и соответствует API, используемому неспециализированными Картами. ( аосп/866053 )

Исправления ошибок

  • Измените SimpleArrayMap , чтобы синхронизировать внутренний глобальный кэш массивов с SimpleArrayMap.class вместо ArrayMap.class . Это гарантирует, что если вы используете только SimpleArrayMap , ArrayMap можно будет удалить с помощью инструментов сжатия кода. ( аосп/934557 )

Версия 1.1.0-rc01

7 мая 2019 г.

androidx.collection:collection:1.1.0-rc01 и androidx.collection:collection-ktx:1.1.0-rc01 выпущены. Коммиты, включенные в эту версию, можно найти здесь .

Новые возможности

  • Используйте более эффективную реализацию функций contains и isNotEmpty в артефакте «collection-ktx». ( аосп/866529 )

Версия 1.1.0-бета01

3 апреля 2019 г.

Выпущены androidx.collection:collection:1.1.0-beta01 и androidx.collection:collection-ktx:1.1.0-beta01 . Коммиты, включенные в эту версию, можно найти здесь .

Изменения API

  • Метод, упомянутый в примечаниях к выпуску Alpha03 с измененным значением @RestrictTo , был удален. Он не использовался ни одной библиотекой AndroidX (сейчас или исторически) и не предлагал каких-либо функций, отсутствующих в общедоступном API.

Исправления ошибок

  • Измените SimpleArrayMap , чтобы синхронизировать внутренний глобальный кэш массивов с SimpleArrayMap.class вместо ArrayMap.class . Это гарантирует, что если вы используете только SimpleArrayMap , ArrayMap можно будет удалить с помощью инструментов сжатия кода. ( аосп/934557 )

Версия 1.1.0-альфа03

13 марта 2019 г.

Выпущены androidx.collection:collection:1.0.0-alpha03 и androidx.collection:collection-ktx:1.0.0-alpha03 . Полный список коммитов, включённых в эту версию, можно найти здесь .

Изменения API

  • Метод в ArraySet ранее отмеченный @RestrictTo(LIBRARY_GROUP) был изменен на @RestrictTo(LIBRARY_GROUP_PREFIX) . Это сделано для поддержки исторического использования другими библиотеками AndroidX, которые теперь имеют разные идентификаторы групп Maven. Этот метод будет либо опубликован, либо удален в версии 1.1.0-alpha04, поскольку другие библиотеки AndroidX не должны получать специальные API, которых нет у других разработчиков.

Версия 1.1.0-альфа02

30 января 2019 г.

Выпущены androidx.collection:collection 1.1.0-alpha02 и androidx.collection:collection-ktx 1.1.0-alpha02 .

Изменения API

  • Устаревшие избыточные методы delete . Методы remove предлагают тот же API и функциональность и соответствуют API, используемому неспециализированными картами. ( аосп/866053 )

Версия 1.1.0-альфа01

3 декабря 2018 г.

Изменения API

  • Добавьте putIfAbsent в LongSparseArray , SimpleArrayMap и SparseArrayCompat ( aosp/772608 ).
  • Добавьте getOrDefault в SimpleArrayMap ( aosp/772607 )
  • Добавьте remove с двумя аргументами в LongSparseArray , SimpleArrayMap и SparseArrayCompat . Устаревшие соответствующие расширения KTX для этой функции. ( аосп/772482 )
  • Добавьте replace с двумя аргументами в LongSparseArray , SimpleArrayMap и SparseArrayCompat ( aosp/772483 ).
  • Добавьте replace с тремя аргументами в LongSparseArray , SimpleArrayMap и SparseArrayCompat ( aosp/772484 ).