Kolekcja

  
Zmniejsz wpływ na pamięć istniejących i nowych kolekcji, które są małe.
Najnowsza aktualizacja Wersja stabilna Kandydat do publikacji Wersja Beta Wersja alfa
24 stycznia 2024 r. 1.4.0 - - -

Deklarowanie zależności

Aby dodać zależność od kolekcji, musisz dodać do projektu repozytorium Google Maven. Więcej informacji znajdziesz w repozytorium Google Maven.

W pliku build.gradle aplikacji lub modułu dodaj zależności artefaktów, których potrzebujesz:

Odlotowy

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

Więcej informacji o zależnościach znajdziesz w artykule Dodawanie zależności kompilacji.

Opinia

Twoja opinia pomoże nam ulepszyć Jetpack. Daj nam znać, jeśli znajdziesz nowe wydania lub masz pomysły na ulepszenie tej biblioteki. Zanim utworzysz nową bibliotekę, przejrzyj problemy z tą biblioteką. Możesz oddać głos w ramach istniejącego problemu, klikając przycisk gwiazdki.

Utwórz nowy numer

Więcej informacji znajdziesz w dokumentacji narzędzia Issue Tracker.

Wersja 1.4

Wersja 1.4.0

24 stycznia 2024 r.

Aplikacja androidx.collection:collection-*:1.4.0 została zwolniona. Wersja 1.4.0 zawiera te zatwierdzenia.

Ważne zmiany od wersji 1.3.0

Dodaliśmy nowe, niezwykle wydajne kolekcje do przechowywania podstawowych elementów bez opakowania:

  • MutableScatterMap i ScatterMap – zajęcia z MutableMap i interfejsem API przypominającym mapę
  • MutableScatterSet i ScatterSet – zajęcia z MutableSet i interfejsem API Set-like
  • MutableObjectList i ObjectList – zajęcia z MutableList i interfejsem API typu List-like

Na przykład mapa z kluczem liczby całkowitej i wartością typu odwołania to IntObjectMap<T>. Mapa z długim kluczem i wartością zmiennoprzecinkową to LongFloatMap. Nie ma wersji o nazwie ObjectObjectMap, ponieważ jest ona objęta zasadą ScatterMap/MutableScatterMap.

Wersja 1.4.0-rc01

10 stycznia 2024 r.

Aplikacja androidx.collection:collection-*:1.4.0-rc01 została wydana bez zmian. Wersja 1.4.0-rc01 zawiera te zatwierdzenia.

Wersja 1.4.0-beta02

29 listopada 2023 r.

Aplikacja androidx.collection:collection-*:1.4.0-beta02 została zwolniona. Wersja 1.4.0-beta02 zawiera te zatwierdzenia.

Nowe funkcje

  • Zwiększono wydajność aplikacji FloatFloatPair. (If5537)

Poprawki błędów

Wersja 1.4.0-beta01

15 listopada 2023 r.

Aplikacja androidx.collection:collection-*:1.4.0-beta01 została zwolniona. Wersja 1.4.0-beta01 zawiera te zatwierdzenia.

Poprawki błędów

  • Usunięto nieprawidłowe ustawienia ListIterator w systemie ObjectList, które mogły doprowadzić do awarii z powodu błędu IndexOutOfBoundsException. (I3bd8a, b/307049391)

Wersja 1.4.0-alfa02

18 października 2023 r.

Aplikacja androidx.collection:collection-*:1.4.0-alpha02 została zwolniona. Wersja 1.4.0-alpha02 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Dodano przeciążenie dla funkcji put, które zwraca poprzednią wartość po zastąpieniu jej wszystkimi zbiorami podstawowymi, np. FloatFloatMap.
  • Przekonwertuj metody removeIf w kolekcjach podstawowych, takich jak MutableFloatFloatMap, na metody wbudowane. Zapewnia to, że funkcja lambda dla funkcji removeIf nie jest przydzielona.

Wersja 1.4.0-alfa01

4 października 2023 r.

Aplikacja androidx.collection:collection-*:1.4.0-alpha01 została zwolniona. Wersja 1.4.0-alpha01 zawiera te zatwierdzenia.

Nowe funkcje

Dodaliśmy nowe kolekcje o wysokiej wydajności, które mają niski koszt alokacji i wysoką wydajność:

  • MutableScatterMap i ScatterMap – zajęcia z MutableMap i interfejsem API przypominającym mapę
  • MutableScatterSet i ScatterSet – zajęcia z MutableSet i interfejsem API Set-like
  • MutableObjectList i ObjectList – zajęcia z MutableList i interfejsem API typu List-like

Dodaliśmy nowe, niezwykle wydajne kolekcje do przechowywania podstawowych elementów bez opakowania:

  • Mutable[Int|Float|Long]List – zajęcia z interfejsem API podobnym do MutableList<Int|Float|Long>. Istnieje też zasób [Int|Float|Long]List tylko do odczytu. Liczby całkowite można na przykład przechowywać w elemencie IntList.
  • Mutable[Int|Float|Long]Set – zajęcia z interfejsem API podobnym do MutableSet<Int|Float|Long>. Istnieje też zasób [Int|Float|Long]Set tylko do odczytu. Na przykład liczby całkowite mogą być przechowywane w elemencie IntSet.
  • Mutable[Int|Float|Long|Object][Int|Float|Long|Object]Map – zajęcia z interfejsem API podobnym do Mutable<Int|Float|Long,T, Int|Float|Long|T>. Istnieje też zasób [Int|Float|Long|Object][Int|Float|Long|Object]Map tylko do odczytu. Na przykład mapa z kluczem liczby całkowitej i wartością typu odwołania to IntObjectMap<T>. Mapa z długim kluczem i wartością zmiennoprzecinkową to LongFloatMap. Nie ma wersji o nazwie ObjectObjectMap, ponieważ jest ona objęta zasadą ScatterMap/MutableScatterMap.

Wersja 1.3.0

Wersja 1.3.0

4 października 2023 r.

Aplikacja androidx.collection:collection-*:1.3.0 została zwolniona. Wersja 1.3.0 zawiera te zatwierdzenia.

Ważne zmiany od wersji 1.2.0

  • Możesz teraz używać kolekcji w projektach wieloplatformowych Kotlin. Pamiętaj, że elementy docelowe kolekcji inne niż Android są nadal w fazie eksperymentalnej, ale zdecydowaliśmy się scalić wersje, by ułatwić deweloperom ich testowanie.
  • Całe źródło zostało przeniesione do Kotlin. W wyniku tej zmiany wiele interfejsów API ma teraz prawidłowo wpisane nazwy nieokreślone, a kilka prywatnych elementów pakietu jest teraz internal. Lista dokładnych zmian jest dostępna w poniższych informacjach o wersji 1.3.x.
  • Wraz z migracją Kotlin aplikacja collection-ktx została scalona z głównym artefaktem kolekcji. Możesz bezpiecznie usunąć wszelkie zależności od collection:collection-ktx na rzecz collection:collection, ponieważ collection-ktx jest teraz puste.

Wersja 1.3.0-rc01

6 września 2023 r.

Aplikacja androidx.collection:collection-*:1.3.0-rc01 została wydana bez zmian. Wersja 1.3.0-rc01 zawiera te zatwierdzenia.

Wersja 1.3.0-beta01

9 sierpnia 2023 r.

Aplikacja androidx.collection:collection-*:1.3.0-beta01 została zwolniona. Wersja 1.3.0-beta01 zawiera te zatwierdzenia.

Wersja 1.3.0-alfa04

24 marca 2023 r.

Aplikacja androidx.collection:collection-*:1.3.0-alpha04 została zwolniona.

Poprawki błędów

  • Usunięto ograniczenia zależności z artefaktów Maven, aby obejść problem z kompilacją w natywnych celach Kotlin (b/274786186, KT-57531).

Wersja 1.3.0-alfa03

22 marca 2023 r.

Aplikacja androidx.collection:collection-*:1.3.0-alpha03 została zwolniona. Wersja 1.3.0-alpha03 zawiera te zatwierdzenia.

Nowe funkcje

  • Możesz teraz używać kolekcji w projektach KMM. Pamiętaj, że elementy docelowe kolekcji inne niż Android są nadal w fazie eksperymentalnej, ale zdecydowaliśmy się scalić wersje, by ułatwić deweloperom ich testowanie.

Zmiany w interfejsie API

  • ArraySet korzysta teraz z interfejsu MutableCollections zamiast AbstractMutableCollection, co pozwala na bardziej wydajne użycie pamięci implementacji toArray (I1ac32)

Poprawki błędów

  • Język ArraySet.toArray jest teraz dostępny tylko w JVM, ponieważ zawsze był uwzględniany wyłącznie na potrzeby zgodności z Javą. Użytkownicy Kotlin powinni ogólnie używać elementów pomocniczych .toTypedArray biblioteki stdlib, które mają tę samą funkcję i dodatkowe bezpieczeństwo. (I2c59b)

Wersja 1.3.0-alfa02

27 lipca 2022 roku

Opublikowano androidx.collection:collection:1.3.0-alpha02 i androidx.collection:collection-ktx:1.3.0-alpha02. Wersja 1.3.0-alpha02 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • SparseArrayCompat jest teraz dostępny dla platform innych niż JVM ze wspólnego artefaktu (Ic9bd0, b/219589118, b/228347315)
  • CircularIntArray jest teraz dostępny dla platform innych niż JVM ze wspólnego artefaktu (I3d8ef, b/228344943)
  • LongSparseArray jest teraz dostępny dla platform innych niż jvm ze wspólnego artefaktu (I73149, b/228347315)

Wersja 1.3.0-alfa01

29 czerwca 2022 r.

Opublikowano androidx.collection:collection:1.3.0-alpha01 i androidx.collection:collection-ktx:1.3.0-alpha01. Wersja 1.3.0-alpha01 zawiera te zatwierdzenia.

Nowe funkcje

  • collection-ktx rozszerzenia zostały przeniesione do głównego artefaktu kolekcji androidx.collection:collection. Ta zmiana sprawia, że istniejące rozszerzenia -ktx są dostępne dla użytkowników Kotlin bez konieczności użycia zależności -ktx przy zachowaniu zgodności dla istniejących użytkowników. Przechowywanie tych rozszerzeń w osobnym artefaktie -ktx nie jest już korzystne, ponieważ główny artefakt został przeniesiony do Kotlin. (I6eef2)

Zmiany w interfejsie API

  • Rozszerzenie ArraySet zawiera teraz rozszerzenie AbstractMutableCollection i nie implementuje już bezpośrednio interfejsu kolekcji. (If6da0, b/230860589)
  • Przekonwertowano: ArraySet na Kotlin. Ze względu na bardziej rygorystyczne warunki pisania niektóre wywołania Kotlin mogą przestać się kompilować. (Id68c1, b/230860589)
    • Te wywołania mają typ argumentu T, a nie T?:
      • ArraySet<T>.contains(null)
      • ArraySet<T>.add(null)
      • ArraySet<T>.remove(null)
    • Te wywołania mają zwracany typ T?, a nie T!:
      • ArraySet<T?>.valueAt(n)
      • ArraySet<T?>.removeAt(n)
      • ArraySet<T?>().iterator().next()
    • W narzędziu Kotlin nie można już wykonywać tych wywołań:
      • set.toArray() – użyj set.toTypedArray()
      • set.toArray(array) – użyj set.forEachIndexed(array::set)
  • Połącz przeciążony konstruktor dla SparseArrayCompat jako opcjonalny argument dla użytkowników Kotlin. (If8407, b/227474719)
  • Usuń składnię operatora dla funkcji SparseArrayCompat.get(key, defaultValue).. Nadal umożliwia to składnię operatorów w .get(key), ale pozwala lepiej dopasować platformę interfejsu API SparseArrayCompat do innych klas w tej bibliotece. (I9a38d)
  • Przenieś rozszerzenia LongSparseArray do głównego artefaktu, androidx.collection:collection. Ta zmiana sprawia, że istniejące rozszerzenia -ktx są dostępne dla użytkowników Kotlin bez konieczności użycia zależności -ktx przy zachowaniu zgodności dla istniejących użytkowników. Przechowywanie tych rozszerzeń w osobnym artefaktie -ktx nie jest już korzystne, ponieważ główny artefakt został przeniesiony do Kotlin. (I8659a)
  • Konwertuj LongSparseArray na Kotlin. Ta zmiana dodaje do typów jawną wartość null (jest to zmiana zgodna z systemem binarnym), ale może powodować niezgodność źródła. W szczególności: * Usługa .isEmpty nie jest już dostępna jako usługa i trzeba uzyskać do niej dostęp jako wywołanie funkcji w Kotlin – .isEmpty() (Idfd0f).
  • Konwertuj SimpleArrayMap na Kotlin. Ta zmiana wprowadza kilka niezgodnych zmian ze względu na interoperacyjność z językiem Java-Kotlin i możliwość poprawnego definiowania null typów w źródle.
    • Prywatne interfejsy API pakietu (.mSize, .mArray, .mHashes, .indexOf(), .indexOfNull() i .indexOfValue()) zostały ustawione jako prywatne – z technicznego punktu widzenia jest to niekompatybilna zmiana, ale odzwierciedla zamierzoną widoczność tych pól i jest najbliższa możliwa do uzyskania w Kotlin, ponieważ nie zawiera sposobu określania widoczności prywatnego pakietu.
    • Wartość null niektórych typów jest teraz prawidłowo zdefiniowana. Metody, których dotyczy problem, to: .getOrDefault, .keyAt, .valueAt, .setValueAt, .put, .putIfAbsent, .removeAt, .replace.
    • Dla użytkowników Kotlin usługa .isEmpty() jest teraz dostępna tylko jako funkcja, a nie przez dostęp do usługi. (I271b7, b/182813986)
  • Konwertuj CircularArray na Kotlin. Ważne zmiany:

    • Poprawia wartość null nazw ogólnych na niezerową, której wcześniej nie można było zadeklarować, ale było egzekwowane we wszystkich publicznych interfejsach API.
    • Dzięki interoperacyjności Kotlina w Javie wcześniej można było uzyskać dostęp do niektórych metod jako właściwości lub funkcji. Aby zmniejszyć liczbę duplikatów przy zachowaniu zgodności plików binarnych, należało usunąć te elementy, co jest zmianą niekompatybilną ze źródłem. Dotyczy to tych wywołań: .isEmpty, .getLast() i .getFirst(). (Ifffac)
  • Konwertuj CircularIntArray na Kotlin. Dzięki interoperacyjności Kotlin w Javie wcześniej można było uzyskać dostęp do określonych metod jako właściwości lub funkcji. Aby zmniejszyć liczbę duplikatów przy zachowaniu zgodności plików binarnych, należało usunąć te elementy, co jest zmianą niekompatybilną ze źródłem. Dotyczy to połączeń: .isEmpty, .getLast() i .getFirst(). (Ie36ce)

  • Konwertuj LruCache na Kotlin (Ia2f19)

  • Konwertuj SparseArrayCompat na Kotlin. (If6fe8)

    Wprowadzono niewielką zmianę działania w funkcji SparseArrayCompat.valueAt(), która już nie zwraca nieprawidłowo wartości null w przypadku niezainicjowanych wywołań spoza zakresu size(), ale mieszczących się w podanej początkowej pojemności.

    Ta zmiana wprowadza też prawidłową wartość null dla niektórych typów, których wcześniej brakowało.

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

Wersja 1.2.0

Wersja 1.2.0

Grudzień 1, 2021

Opublikowano androidx.collection:collection:1.2.0 i androidx.collection:collection-ktx:1.2.0. Wersja 1.2.0 zawiera te zatwierdzenia.

Ważne zmiany od wersji 1.1.0

  • Dodaj konstruktor tablicowy do elementu ArraySet. (Id7f19).
  • Zadbaj o zgodność z interfejsem API entrySet(), implementując entrySet().toArray(), remove(), removeAll() i retainAll() oraz usuwając implementację entrySet().addAll() (I5d505)

Wersja 1.2.0-rc01

17 listopada 2021 r.

Opublikowano androidx.collection:collection:1.2.0-rc01 i androidx.collection:collection-ktx:1.2.0-rc01. Wersja 1.2.0-rc01 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Brak zmian w stosunku do poprzedniej wersji beta.

Wersja 1.2.0-beta01

13 października 2021 r.

Opublikowano androidx.collection:collection:1.2.0-beta01 i androidx.collection:collection-ktx:1.2.0-beta01. Wersja 1.2.0-beta01 zawiera te zatwierdzenia.

Poprawki błędów

  • Zadbaj o zgodność z interfejsem API entrySet(), implementując entrySet().toArray(), remove(), removeAll() i retainAll() oraz usuwając implementację entrySet().addAll() (I5d505)

Wersja 1.2.0-alfa01

16 grudnia 2020 roku

Opublikowano androidx.collection:collection:1.2.0-alpha01 i androidx.collection:collection-ktx:1.2.0-alpha01. Wersja 1.2.0-alpha01 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Dodaj konstruktor tablicowy do elementu ArraySet. (Id7f19).

Wersja 1.1.0

Wersja 1.1.0

5 czerwca 2019 r.

Opublikowano androidx.collection:collection:1.1.0 i androidx.collection:collection-ktx:1.1.0. Zatwierdzenia dostępne w wersji 1.1.0 znajdziesz tutaj.

Poniżej znajduje się podsumowanie zmian z 1.0.0 na 1.1.0:

Nowe funkcje

  • Użyj wydajniejszej implementacji funkcji contains i isNotEmpty w artefakcie „collection-ktx”. (Aosp/866529)

Zmiany w interfejsie API

  • Dodaj putIfAbsent do usług LongSparseArray, SimpleArrayMap i SparseArrayCompat (aosp/772608)
  • Dodaj getOrDefault do SimpleArrayMap (aosp/772607)
  • Dodaj dwuargumentowy element remove do elementów LongSparseArray, SimpleArrayMap i SparseArrayCompat. Wycofaj odpowiednie rozszerzenia KTX dla tej funkcji. (Aosp/772482)
  • Dodaj dwuargumentowy element replace do elementów LongSparseArray, SimpleArrayMap i SparseArrayCompat (aosp/772483)
  • Dodaj 3-argumentowy element replace do elementów LongSparseArray, SimpleArrayMap i SparseArrayCompat (aosp/772484)
  • Wycofaj zbędne metody delete. Metoda remove ma ten sam interfejs API i funkcje oraz jest zgodna z interfejsem API używanym przez niewyspecjalizowane mapy. (Aosp/866053)

Poprawki błędów

  • Zmień SimpleArrayMap, aby synchronizować wewnętrzną, globalną pamięć podręczną tablic w systemie SimpleArrayMap.class, a nie w ArrayMap.class. Dzięki temu, jeśli używasz tylko SimpleArrayMap, ArrayMap można usunąć za pomocą narzędzi do zmniejszania kodu. (Aosp/934557)

Wersja 1.1.0-rc01

7 maja 2019 r.

Opublikowano androidx.collection:collection:1.1.0-rc01 i androidx.collection:collection-ktx:1.1.0-rc01. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Nowe funkcje

  • Użyj wydajniejszej implementacji funkcji contains i isNotEmpty w artefakcie „collection-ktx”. (Aosp/866529)

Wersja 1.1.0-beta01

3 kwietnia 2019 r.

Opublikowano androidx.collection:collection:1.1.0-beta01 i androidx.collection:collection-ktx:1.1.0-beta01. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Zmiany w interfejsie API

  • Metoda wspomniana w informacjach o wersji alfa03 jako mająca wartość @RestrictTo została usunięta. Nie była używana przez żadną bibliotekę AndroidX (teraz lub w przeszłości) i nie miała żadnych funkcji, których brakowało w publicznym interfejsie API.

Poprawki błędów

  • Zmień SimpleArrayMap, aby synchronizować wewnętrzną, globalną pamięć podręczną tablic w systemie SimpleArrayMap.class, a nie w ArrayMap.class. Dzięki temu, jeśli używasz tylko SimpleArrayMap, ArrayMap można usunąć za pomocą narzędzi do zmniejszania kodu. (Aosp/934557)

Wersja 1.1.0-alfa03

13 marca 2019 r.

Zwolniono androidx.collection:collection:1.0.0-alpha03 i androidx.collection:collection-ktx:1.0.0-alpha03. Pełną listę zatwierdzeń zawartych w tej wersji znajdziesz tutaj.

Zmiany w interfejsie API

  • Metoda na zasobie ArraySet, wcześniej oznaczona jako @RestrictTo(LIBRARY_GROUP), została zmieniona na @RestrictTo(LIBRARY_GROUP_PREFIX). Ma to na celu obsługę użycia historycznego przez inne biblioteki AndroidaX, które są teraz w różnych identyfikatorach grup Maven. Ta metoda stanie się publiczna lub zostanie usunięta w wersjach 1.1.0-alfa04, ponieważ inne biblioteki AndroidaX nie powinny mieć dostępu do specjalnych interfejsów API, których nie mają inni deweloperzy.

Wersja 1.1.0-alfa02

30 stycznia 2019 r.

Zwolniono androidx.collection:collection 1.1.0-alpha02 i androidx.collection:collection-ktx 1.1.0-alpha02.

Zmiany w interfejsie API

  • Wycofaj zbędne metody delete. Metody remove mają taki sam interfejs API i funkcje oraz są zgodne z interfejsem API używanym przez niewyspecjalizowane mapy. (Aosp/866053)

Wersja 1.1.0-alfa01

3 grudnia 2018 r.

Zmiany w interfejsie API

  • Dodaj putIfAbsent do usług LongSparseArray, SimpleArrayMap i SparseArrayCompat (aosp/772608)
  • Dodaj getOrDefault do SimpleArrayMap (aosp/772607)
  • Dodaj dwuargumentowy element remove do elementów LongSparseArray, SimpleArrayMap i SparseArrayCompat. Wycofaj odpowiednie rozszerzenia KTX dla tej funkcji. (Aosp/772482)
  • Dodaj dwuargumentowy element replace do elementów LongSparseArray, SimpleArrayMap i SparseArrayCompat (aosp/772483)
  • Dodaj 3-argumentowy element replace do elementów LongSparseArray, SimpleArrayMap i SparseArrayCompat (aosp/772484)