컬렉션

  
크기가 작은 기존 컬렉션 및 새로운 컬렉션이 메모리에 미치는 영향을 줄입니다.
최근 업데이트 안정화 버전 출시 후보 버전 베타 버전 알파 버전
2024년 1월 24일 1.4.0 - - -

종속 항목 선언

Collection의 종속 항목을 추가하려면 프로젝트에 Google Maven 저장소를 추가해야 합니다. 자세한 내용을 알아보려면 Google Maven 저장소를 읽어보세요.

다음과 같이 앱 또는 모듈의 build.gradle 파일에 필요한 아티팩트의 종속 항목을 추가합니다.

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

종속 항목에 관한 자세한 내용은 빌드 종속 항목 추가를 참고하세요.

의견

제출하신 의견은 Jetpack을 개선하는 데 도움이 됩니다. 새로운 문제를 발견하거나 라이브러리 개선을 위한 아이디어가 있다면 Google에 알려 주세요. 새 문제를 제출하기 전에 이 라이브러리의 기존 문제를 살펴보시기 바랍니다. 별표 버튼을 클릭하여 기존 문제에 투표할 수 있습니다.

새로운 문제 제출하기

자세한 내용은 Issue Tracker 문서를 참고하세요.

버전 1.4

버전 1.4.0

2024년 1월 24일

androidx.collection:collection-*:1.4.0가 출시되었습니다. 버전 1.4.0에 포함된 커밋을 확인하세요.

1.3.0 이후 중요 변경사항

권투 없이 프리미티브를 저장하기 위한 새로운 고효율 컬렉션이 추가되었습니다.

  • MutableScatterMapScatterMap - MutableMap 및 Map 유사 API를 사용하는 클래스
  • MutableScatterSetScatterSet - MutableSet 및 Set과 같은 API를 사용하는 클래스
  • MutableObjectListObjectList - MutableList 및 List와 유사한 API를 사용하는 클래스

예를 들어 정수 키와 참조 유형 값이 있는 맵은 IntObjectMap<T>입니다. 긴 키와 부동 소수점 값이 있는 지도는 LongFloatMap입니다. 이름이 ObjectObjectMap인 버전은 없습니다. 이 버전은 ScatterMap/MutableScatterMap에 포함됩니다.

버전 1.4.0-rc01

2024년 1월 10일

androidx.collection:collection-*:1.4.0-rc01은 변경사항 없이 출시되었습니다. 버전 1.4.0-rc01에 포함된 커밋을 확인하세요.

버전 1.4.0-beta02

2023년 11월 29일

androidx.collection:collection-*:1.4.0-beta02가 출시되었습니다. 버전 1.4.0-beta02에 포함된 커밋을 확인하세요.

새로운 기능

  • FloatFloatPair의 성능이 개선되었습니다. 추가합니다. (If5537)

버그 수정

  • ScatterMap.asMap() 반복자가 이제 새 인스턴스를 반환합니다. (I28932, b/310365754)

버전 1.4.0-beta01

2023년 11월 15일

androidx.collection:collection-*:1.4.0-beta01가 출시되었습니다. 버전 1.4.0-beta01에 포함된 커밋을 확인하세요.

버그 수정

  • IndexOutOfBoundsException로 인해 비정상 종료를 일으킬 수 있는 ObjectList의 값을 잘못 설정하는 ListIterator 문제를 수정했습니다. 추가했습니다. (I3bd8a, b/307049391)

버전 1.4.0-alpha02

2023년 10월 18일

androidx.collection:collection-*:1.4.0-alpha02가 출시되었습니다. 버전 1.4.0-alpha02에 포함된 커밋을 확인하세요.

API 변경사항

  • FloatFloatMap와 같은 모든 기본 컬렉션으로 대체될 때 이전 값을 반환하는 put의 오버로드를 추가했습니다.
  • MutableFloatFloatMap와 같은 프리미티브 컬렉션의 removeIf 메서드를 인라인으로 변환합니다. 이렇게 하면 removeIf의 람다가 할당되지 않습니다.

버전 1.4.0-alpha01

2023년 10월 4일

androidx.collection:collection-*:1.4.0-alpha01가 출시되었습니다. 버전 1.4.0-alpha01에 포함된 커밋을 확인하세요.

새로운 기능

낮은 할당 오버헤드와 높은 성능의 새로운 고효율 컬렉션이 추가되었습니다.

  • MutableScatterMapScatterMap - MutableMap 및 Map 유사 API를 사용하는 클래스
  • MutableScatterSetScatterSet - MutableSet 및 Set과 같은 API를 사용하는 클래스
  • MutableObjectListObjectList - MutableList 및 List와 유사한 API를 사용하는 클래스

권투 없이 프리미티브를 저장하기 위한 새로운 고효율 컬렉션이 추가되었습니다.

  • Mutable[Int|Float|Long]List - MutableList<Int|Float|Long>와 같은 API를 사용하는 클래스입니다. 읽기 전용 [Int|Float|Long]List도 존재합니다. 예를 들어 정수는 IntList에 보유할 수 있습니다.
  • Mutable[Int|Float|Long]Set - MutableSet<Int|Float|Long>와 같은 API를 사용하는 클래스입니다. 읽기 전용 [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

2023년 10월 4일

androidx.collection:collection-*:1.3.0가 출시되었습니다. 버전 1.3.0에 포함된 커밋을 확인하세요.

1.2.0 이후 중요 변경사항

  • 이제 Kotlin 멀티플랫폼 프로젝트에서 컬렉션을 사용할 수 있습니다. Android가 아닌 컬렉션 타겟은 아직 실험 단계이지만, 개발자가 더 쉽게 사용해 볼 수 있도록 버전을 병합하기로 결정했습니다.
  • 모든 소스가 Kotlin으로 이전되었습니다. 이러한 변경의 일환으로 이제 많은 API가 nullity에 대해 올바르게 유형이 지정되며 일부 패키지 비공개 멤버가 internal가 되었습니다. 정확한 변경사항 목록은 아래 1.3.x의 부 출시 노트에서 확인할 수 있습니다.
  • Kotlin 이전과 함께 collection-ktx가 기본 컬렉션 아티팩트와 병합되었습니다. 이제 collection-ktx가 비어 있으므로 collection:collection로 대체하여 collection:collection-ktx의 종속 항목을 안전하게 삭제할 수 있습니다.

버전 1.3.0-rc01

2023년 9월 6일

androidx.collection:collection-*:1.3.0-rc01은 변경사항 없이 출시되었습니다. 버전 1.3.0-rc01에 포함된 커밋을 확인하세요.

버전 1.3.0-beta01

2023년 8월 9일

androidx.collection:collection-*:1.3.0-beta01가 출시되었습니다. 버전 1.3.0-beta01에 포함된 커밋을 확인하세요.

버전 1.3.0-alpha04

2023년 3월 24일

androidx.collection:collection-*:1.3.0-alpha04가 출시되었습니다.

버그 수정

  • Kotlin 네이티브 타겟의 빌드 문제를 해결하기 위해 Maven 아티팩트에서 종속 항목 제약 조건을 삭제했습니다. (b/274786186, KT-57531)

버전 1.3.0-alpha03

2023년 3월 22일

androidx.collection:collection-*:1.3.0-alpha03가 출시되었습니다. 버전 1.3.0-alpha03에 포함된 커밋을 확인하세요.

새로운 기능

  • 이제 KMM 프로젝트에서 컬렉션을 사용할 수 있습니다. Android가 아닌 컬렉션 타겟은 아직 실험 단계이지만, 개발자가 더 쉽게 사용해 볼 수 있도록 버전을 병합하기로 결정했습니다.

API 변경사항

  • ArraySet는 이제 AbstractMutableCollection 대신 MutableCollections를 구현하여 toArray를 더 메모리 효율적인 방식으로 구현할 수 있습니다. (I1ac32)

버그 수정

  • ArraySet.toArray는 이제 항상 JVM에서만 사용할 수 있습니다. Java와의 호환성을 위해서만 포함되었기 때문입니다. Kotlin 사용자는 일반적으로 stdlib의 .toTypedArray 도우미를 대신 사용해야 합니다. 이 도우미는 추가된 유형 안전성과 정확히 동일한 기능을 제공합니다. 추가했습니다. (I2c59b)

버전 1.3.0-alpha02

2022년 7월 27일

androidx.collection:collection:1.3.0-alpha02androidx.collection:collection-ktx:1.3.0-alpha02가 출시되었습니다. 버전 1.3.0-alpha02에 포함된 커밋을 확인하세요.

API 변경사항

  • 이제 일반 아티팩트의 jvm 외의 플랫폼에서 SparseArrayCompat를 사용할 수 있습니다(Ic9bd0, b/219589118, b/228347315).
  • 이제 일반 아티팩트의 jvm 외의 플랫폼에서 CircularIntArray를 사용할 수 있습니다(I3d8ef, b/228344943).
  • 이제 일반 아티팩트의 jvm 외의 플랫폼에서 LongSparseArray를 사용할 수 있습니다(I73149, b/228347315).

버전 1.3.0-alpha01

2022년 6월 29일

androidx.collection:collection:1.3.0-alpha01androidx.collection:collection-ktx:1.3.0-alpha01이 출시되었습니다. 버전 1.3.0-alpha01에 포함된 커밋을 확인하세요.

새로운 기능

  • collection-ktx 확장 프로그램을 기본 컬렉션 아티팩트 androidx.collection:collection으로 이전했습니다. 이 변경사항으로 인해 기존 사용자의 호환성을 계속 유지하면서 -ktx 종속 항목 없이도 Kotlin 사용자가 기존 -ktx 확장 프로그램에 액세스할 수 있습니다. 이러한 확장 프로그램을 별도의 -ktx 아티팩트로 유지하는 것은 더 이상 유용하지 않습니다. 주요 아티팩트가 Kotlin으로 이동했기 때문입니다(I6eef2).

API 변경사항

  • 이제 ArraySetAbstractMutableCollection을 확장하며 더 이상 Collection 인터페이스를 직접 구현하지 않습니다(If6da0, b/230860589).
  • ArraySet를 Kotlin으로 변환했습니다. 더 엄격한 입력으로 인해 일부 Kotlin 호출이 더 이상 컴파일되지 않을 수 있습니다(Id68c1, b/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 사용자의 선택적 인수로 결합합니다(If8407, b/227474719).
  • SparseArrayCompat.get(key, defaultValue).의 연산자 문법을 삭제합니다. 이는 여전히 .get(key)의 연산자 문법을 허용하지만 SparseArrayCompat의 API 노출 영역을 이 라이브러리의 다른 클래스와 더 정확히 정렬합니다(I9a38d).
  • LongSparseArray 확장 프로그램을 기본 아티팩트 androidx.collection:collection으로 이전합니다. 이 변경사항으로 인해 기존 사용자의 호환성을 계속 유지하면서 -ktx 종속 항목 없이도 Kotlin 사용자가 기존 -ktx 확장 프로그램에 액세스할 수 있습니다. 이러한 확장 프로그램을 별도의 -ktx 아티팩트로 유지하는 것은 더 이상 유용하지 않습니다. 주요 아티팩트가 Kotlin으로 이동했기 때문입니다(I8659a).
  • LongSparseArray를 Kotlin으로 변환합니다. 이 변경사항으로 인해 유형에 명시적 nullity가 추가되며 이는 바이너리 호환 변경이지만 소스 비호환성을 유발할 수 있습니다. 특히 * .isEmpty는 더 이상 속성으로 액세스할 수 없으며 Kotlin의 함수 호출 .isEmpty()로 액세스해야 합니다(Idfd0f).
  • SimpleArrayMap을 Kotlin으로 변환합니다. 이 변경사항으로 인해 몇 가지 호환되지 않는 변경사항이 발생합니다. 자바-Kotlin 상호 운용성과 소스에서 유형의 nullity를 올바르게 정의하는 기능 때문입니다.
    • 패키지 비공개 API .mSize, .mArray, .mHashes, .indexOf(), .indexOfNull(), .indexOfValue()를 비공개로 설정했습니다. 이는 기술적으로 바이너리 비호환 변경이지만 이러한 필드의 의도된 가시성을 반영하며 Kotlin에서 달성할 수 있는 가장 가까운 부분입니다. 패키지 비공개 가시성을 지정하는 방법이 포함되어 있지 않기 때문입니다.
    • 이제 일부 유형의 nullity가 올바르게 정의되었습니다. 영향을 받는 메서드는 다음과 같습니다. .getOrDefault, .keyAt, .valueAt, .setValueAt, .put, .putIfAbsent, .removeAt, .replace
    • Kotlin 사용자의 경우 이제 .isEmpty()는 속성 액세스를 통해서가 아니라 함수로만 사용할 수 있습니다(I271b7, b/182813986).
  • CircularArray를 Kotlin으로 변환합니다. 주요 변경사항은 다음과 같습니다.

    • 제네릭의 nullity가 null이 아닌 것이 되도록 수정합니다. 이는 이전에는 선언할 수 없었지만 모든 공개 API에서 시행되었습니다.
    • Kotlin의 자바 상호 운용성으로 인해 이전에는 속성이나 함수로 특정 메서드에 액세스할 수 있었습니다. 그러나 바이너리 호환성을 유지하면서 중복을 줄이기 위해 소스와 호환되지 않는 변경사항을 삭제해야 했습니다. 영향을 받는 호출은 .isEmpty, .getLast(), .getFirst()입니다. (Ifffac)
  • CircularIntArray를 Kotlin으로 변환합니다. Kotlin의 자바 상호 운용성으로 인해 이전에는 속성이나 함수로 특정 메서드에 액세스할 수 있었습니다. 그러나 바이너리 호환성을 유지하면서 중복을 줄이기 위해 소스와 호환되지 않는 변경사항을 삭제해야 했습니다. 영향을 받는 호출은 .isEmpty, .getLast(), .getFirst()입니다. (Ie36ce)

  • LruCache를 Kotlin으로 변환합니다. (Ia2f19)

  • SparseArrayCompat를 Kotlin으로 변환합니다(If6fe8).

    작은 동작 변경사항이 SparseArrayCompat.valueAt()에 추가되어 size() 경계 밖에서 그러나 제공된 초기 용량 내에서 초기화되지 않은 호출에 관해 더 이상 잘못 null을 반환하지 않습니다

    이 변경으로 인해, 이전에 누락되었던 일부 유형의 올바른 nullity도 도입되었습니다.

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

2021년 12월 1일

androidx.collection:collection:1.2.0androidx.collection:collection-ktx:1.2.0가 출시되었습니다. 버전 1.2.0에 포함된 커밋을 확인하세요.

1.1.0 이후 중요 변경사항

  • 배열 생성자를 ArraySet에 추가했습니다. (Id7f19)
  • entrySet().toArray(), remove(), removeAll(), retainAll()을 구현하고 entrySet().addAll() 구현을 삭제하여 entrySet() API를 준수하도록 합니다. (I5d505)

버전 1.2.0-rc01

2021년 11월 17일

androidx.collection:collection:1.2.0-rc01androidx.collection:collection-ktx:1.2.0-rc01가 출시되었습니다. 버전 1.2.0-rc01에 포함된 커밋을 확인하세요.

API 변경사항

  • 이전 베타에서 변경된 사항 없음

버전 1.2.0-beta01

2021년 10월 13일

androidx.collection:collection:1.2.0-beta01androidx.collection:collection-ktx:1.2.0-beta01이 출시되었습니다. 버전 1.2.0-beta01에 포함된 커밋을 확인하세요.

버그 수정

  • entrySet().toArray(), remove(), removeAll(), retainAll()을 구현하고 entrySet().addAll() 구현을 삭제하여 entrySet() API를 준수하도록 합니다. (I5d505)

버전 1.2.0-alpha01

2020년 12월 16일

androidx.collection:collection:1.2.0-alpha01androidx.collection:collection-ktx:1.2.0-alpha01가 출시되었습니다. 버전 1.2.0-alpha01에 포함된 커밋을 확인하세요.

API 변경사항

  • 배열 생성자를 ArraySet에 추가했습니다. (Id7f19)

버전 1.1.0

버전 1.1.0

2019년 6월 5일

androidx.collection:collection:1.1.0androidx.collection:collection-ktx:1.1.0가 출시되었습니다. 1.1.0에 포함된 커밋은 여기에서 확인할 수 있습니다.

다음은 1.0.0에서 1.1.0으로 변경된 사항을 요약한 내용입니다.

새로운 기능

  • 'collection-ktx' 아티팩트의 containsisNotEmpty 함수에서 더 효율적인 구현을 사용합니다. (aosp/866529)

API 변경사항

  • LongSparseArray, SimpleArrayMap, SparseArrayCompatputIfAbsent를 추가합니다. (aosp/772608)
  • SimpleArrayMapgetOrDefault를 추가합니다. (aosp/772607)
  • LongSparseArray, SimpleArrayMap, SparseArrayCompat에 2인수 remove를 추가합니다. 이 기능에 상응하는 KTX 확장 프로그램을 지원 중단합니다. (aosp/772482)
  • LongSparseArray, SimpleArrayMap, SparseArrayCompat에 2인수 replace를 추가합니다. (aosp/772483)
  • LongSparseArray, SimpleArrayMap, SparseArrayCompat에 3인수 replace를 추가합니다. (aosp/772484)
  • 중복되는 delete 메서드를 지원 중단합니다. remove 메서드는 동일한 API 및 기능을 제공하며 특수화되지 않은 지도에서 사용되는 API와 일치합니다. (aosp/866053)

버그 수정

  • ArrayMap.class 대신 SimpleArrayMap.class에서 내부 글로벌 어레이 캐시를 동기화하도록 SimpleArrayMap을 변경했습니다. 따라서 SimpleArrayMap만 사용 중인 경우 코드 축소 도구를 사용하여 ArrayMap을 삭제할 수 있습니다. (aosp/934557)

버전 1.1.0-rc01

2019년 5월 7일

androidx.collection:collection:1.1.0-rc01androidx.collection:collection-ktx:1.1.0-rc01이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.

새로운 기능

  • 'collection-ktx' 아티팩트의 containsisNotEmpty 함수에서 더 효율적인 구현을 사용합니다. (aosp/866529)

버전 1.1.0-beta01

2019년 4월 3일

androidx.collection:collection:1.1.0-beta01androidx.collection:collection-ktx:1.1.0-beta01가 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.

API 변경사항

  • alpha03 출시 노트@RestrictTo 값이 변경된 것으로 설명된 메서드가 삭제되었습니다. 이 메서드는 AndroidX 라이브러리에서 사용되지 않았으며(현재 또는 이전), 공개 API에서 누락된 기능을 제공하지 않았습니다.

버그 수정

  • ArrayMap.class 대신 SimpleArrayMap.class에서 내부 글로벌 어레이 캐시를 동기화하도록 SimpleArrayMap을 변경했습니다. 따라서 SimpleArrayMap만 사용 중인 경우 코드 축소 도구를 사용하여 ArrayMap을 삭제할 수 있습니다. (aosp/934557)

버전 1.1.0-alpha03

2019년 3월 13일

androidx.collection:collection:1.0.0-alpha03androidx.collection:collection-ktx:1.0.0-alpha03이 출시되었습니다. 이 버전에 포함된 커밋의 전체 목록은 여기에서 확인할 수 있습니다.

API 변경사항

  • 이전에 @RestrictTo(LIBRARY_GROUP)로 표시되던 ArraySet의 메서드가 @RestrictTo(LIBRARY_GROUP_PREFIX)로 변경되었습니다. 이는 이제 다른 Maven 그룹 ID에 있는 다른 AndroidX 라이브러리의 방문 기록 사용을 지원하기 위한 것입니다. 다른 AndroidX 라이브러리에서 다른 개발자가 가져오지 않는 특수 API를 가져오면 안 되므로 이 메서드는 1.1.0-alpha04에서 공개되거나 삭제됩니다.

버전 1.1.0-alpha02

2019년 1월 30일

androidx.collection:collection 1.1.0-alpha02androidx.collection:collection-ktx 1.1.0-alpha02가 출시되었습니다.

API 변경사항

  • 중복되는 delete 메서드를 지원 중단합니다. remove 메서드는 동일한 API 및 기능을 제공하며 특수화되지 않은 지도에서 사용되는 API와 일치합니다. (aosp/866053)

버전 1.1.0-alpha01

2018년 12월 3일

API 변경사항

  • LongSparseArray, SimpleArrayMap, SparseArrayCompatputIfAbsent를 추가합니다. (aosp/772608)
  • SimpleArrayMapgetOrDefault를 추가합니다. (aosp/772607)
  • LongSparseArray, SimpleArrayMap, SparseArrayCompat에 2인수 remove를 추가합니다. 이 기능에 상응하는 KTX 확장 프로그램을 지원 중단합니다. (aosp/772482)
  • LongSparseArray, SimpleArrayMap, SparseArrayCompat에 2인수 replace를 추가합니다. (aosp/772483)
  • LongSparseArray, SimpleArrayMap, SparseArrayCompat에 3인수 replace를 추가합니다. (aosp/772484)