コレクション

  
小規模な既存のコレクションと新しいコレクションのメモリへの影響を軽減します。
最新の更新 安定版リリース リリース候補版 ベータ版リリース アルファ版リリース
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 改善の参考にさせていただきます。新しい問題が見つかった場合や、このライブラリを改善するアイデアをお持ちの場合は、お知らせください。新しい問題を報告していただく前に、このライブラリの既存の問題をご確認ください。スターボタンをクリックすると、既存の問題に投票できます。

新しい問題を報告する

詳細については、Issue Tracker のドキュメントをご覧ください。

バージョン 1.4

バージョン 1.4.0

2024 年 1 月 24 日

androidx.collection:collection-*:1.4.0 がリリースされました。バージョン 1.4.0 に含まれる commit については、こちらをご覧ください

1.3.0 以降の重要な変更

ボクシングなしでプリミティブを保存するための新しい高効率コレクションが追加されました。

  • MutableScatterMapScatterMap - MutableMap と Map-like API のクラス
  • MutableScatterSetScatterSet - MutableSet と Set-like API のクラス
  • MutableObjectListObjectList - MutableList とリストのような 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 に含まれる commit については、こちらをご覧ください。

バージョン 1.4.0-beta02

2023 年 11 月 29 日

androidx.collection:collection-*:1.4.0-beta02 がリリースされました。バージョン 1.4.0-beta02 に含まれる commit については、こちらをご覧ください

新機能

  • FloatFloatPair のパフォーマンスを改善しました。(If5537

バグの修正

  • ScatterMap.asMap() イテレータが新しいインスタンスを返すようになりました。(I28932b/310365754

バージョン 1.4.0-beta01

2023 年 11 月 15 日

androidx.collection:collection-*:1.4.0-beta01 がリリースされました。バージョン 1.4.0-beta01 に含まれる commit については、こちらをご覧ください

バグの修正

  • ListIteratorObjectList に誤って値を設定しており、IndexOutOfBoundsException が原因でクラッシュを引き起こす可能性がある問題を修正しました。(I3bd8ab/307049391

バージョン 1.4.0-alpha02

2023 年 10 月 18 日

androidx.collection:collection-*:1.4.0-alpha02 がリリースされました。バージョン 1.4.0-alpha02 に含まれる commit については、こちらをご覧ください

API の変更

  • すべてのプリミティブ コレクション(FloatFloatMap など)に置換されたときに以前の値を返す put のオーバーロードを追加しました。
  • MutableFloatFloatMap などのプリミティブ コレクションの removeIf メソッドをインラインに変換します。これにより、removeIf のラムダが割り当てられなくなります。

バージョン 1.4.0-alpha01

2023 年 10 月 4 日

androidx.collection:collection-*:1.4.0-alpha01 がリリースされました。バージョン 1.4.0-alpha01 に含まれる commit については、こちらをご覧ください

新機能

割り当てのオーバーヘッドが少なく、高パフォーマンスの、高効率の新しいコレクションが追加されました。

  • MutableScatterMapScatterMap - MutableMap と Map-like API のクラス
  • MutableScatterSetScatterSet - MutableSet と Set-like API のクラス
  • MutableObjectListObjectList - MutableList とリストのような 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 に含まれる commit については、こちらをご覧ください

1.2.0 以降の重要な変更

  • Kotlin マルチプラットフォーム プロジェクトでコレクションを使用できるようになりました。Android 以外のコレクションのターゲットはまだ試験運用版ですが、デベロッパーが簡単に試せるようにバージョンをマージすることにしました。
  • ソースはすべて Kotlin に移行されています。この変更に伴い、多くの API で null 可能性が適切に型付けされ、一部のパッケージ プライベート メンバーが 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 に含まれる commit については、こちらをご覧ください

バージョン 1.3.0-beta01

2023 年 8 月 9 日

androidx.collection:collection-*:1.3.0-beta01 がリリースされました。バージョン 1.3.0-beta01 に含まれる commit については、こちらをご覧ください

バージョン 1.3.0-alpha04

2023 年 3 月 24 日

androidx.collection:collection-*:1.3.0-alpha04 がリリースされました。

バグの修正

  • Kotlin Native Targets のビルドの問題を回避するために、Maven アーティファクトから依存関係の制約を削除しました(b/274786186KT-57531)。

バージョン 1.3.0-alpha03

2023 年 3 月 22 日

androidx.collection:collection-*:1.3.0-alpha03 がリリースされました。バージョン 1.3.0-alpha03 に含まれる commit については、こちらをご覧ください

新機能

  • KMM プロジェクトでコレクションを使用できるようになりました。Android 以外のコレクションのターゲットはまだ試験運用中ですが、デベロッパーが簡単に試せるようにバージョンをマージすることにしました。

API の変更

  • ArraySetAbstractMutableCollection ではなく MutableCollections を実装し、メモリ効率の高い toArray の実装が可能になりました。(I1ac32

バグの修正

  • ArraySet.toArray は、これまでは Java との互換性のためにのみ含まれていたため、JVM でのみ使用できるようになりました。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 に含まれる commit については、こちらをご覧ください

API の変更

  • SparseArrayCompat が、共通のアーティファクトから JVM 以外のプラットフォームで利用できるようになりました。(Ic9bd0b/219589118b/228347315
  • CircularIntArray が、共通のアーティファクトから JVM 以外のプラットフォームで利用できるようになりました。(I3d8efb/228344943
  • LongSparseArray が、共通のアーティファクトから JVM 以外のプラットフォームで利用できるようになりました。(I73149b/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 に含まれる commit については、こちらをご覧ください

新機能

  • collection-ktx 拡張機能がメインのコレクション アーティファクト androidx.collection:collection に移行されました。この変更により、既存ユーザーに対する互換性を維持しつつ、-ktx 依存関係を必要とすることなく、Kotlin ユーザーが既存の -ktx 拡張機能にアクセスできるようになります。メイン アーティファクトを Kotlin に移行したため、このような拡張機能を別の -ktx アーティファクトで維持するメリットがなくなりました。(I6eef2

API の変更

  • ArraySetAbstractMutableCollection を拡張し、Collection インターフェースを直接実装しなくなりました。(If6da0b/230860589
  • ArraySet を Kotlin に変換しました。入力が厳密になったため、一部の Kotlin 呼び出しはコンパイルされなくなる場合があります。(Id68c1b/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) を使用します
  • Kotlin ユーザーのオプションの引数として、SparseArrayCompat のオーバーロードされたコンストラクタを結合します。(If8407b/227474719
  • SparseArrayCompat.get(key, defaultValue). の演算子構文を削除しました。引き続き .get(key) の演算子構文を使用できますが、SparseArrayCompat の API サーフェスの方がこのライブラリ内の他のクラスには適しています。(I9a38d
  • LongSparseArray 拡張機能をメインのアーティファクト androidx.collection:collection に移行します。この変更により、既存ユーザーに対する互換性を維持しつつ、-ktx 依存関係を必要とすることなく、Kotlin ユーザーが既存の -ktx 拡張機能にアクセスできるようになります。メイン アーティファクトを Kotlin に移行したため、このような拡張機能を別の -ktx アーティファクトで維持するメリットがなくなりました。(I8659a
  • LongSparseArray を Kotlin に変換します。この変更により、型に明示的な null 可能性が追加されます。これはバイナリ互換の変更ですが、ソースの非互換性が生じる場合があります。具体例: * .isEmpty がプロパティとしてアクセスできなくなりました。Kotlin で関数呼び出しとしてアクセスする必要があります - .isEmpty()Idfd0f
  • SimpleArrayMap を Kotlin に変換します。この変更により、いくつかの互換性のない変更が導入されます。これは、Java-Kotlin の相互運用性と、ソース内の型の null 可能性を正しく定義する機能によるものです。
    • パッケージの非公開 API .mSize.mArray.mHashes.indexOf().indexOfNull().indexOfValue() は非公開になりました。これは技術的にはバイナリ非互換の変更ですが、これらのフィールドの意図された可視性を反映しており、パッケージ プライベートの可視性を指定する方法が含まれていないため、Kotlin で達成できる最も近いものです。
    • 一部の型の null 可能性が適切に定義されるようになりました。影響を受けるメソッドは、.getOrDefault.keyAt.valueAt.setValueAt.put.putIfAbsent.removeAt.replace です。
    • Kotlin ユーザーの場合、.isEmpty() はプロパティ アクセスではなく、関数としてのみ使用できるようになりました。(I271b7b/182813986
  • CircularArray を Kotlin に変換します。主な変更点:

    • ジェネリックの null 可能性を null 以外に修正しました。これは、以前は宣言できませんでしたが、すべての公開 API に適用されています。
    • Kotlin の Java 相互運用性により、以前はプロパティまたは関数の両方として特定のメソッドにアクセスできました。ただし、バイナリ互換性を維持しながら重複を削減するには、ソース互換性のない変更を削除する必要がありました。影響を受ける呼び出しは、.isEmpty.getLast().getFirst() です。(Ifffac
  • CircularIntArray を Kotlin に変換します。Kotlin の Java 相互運用性により、以前はプロパティまたは関数の両方として特定のメソッドにアクセスできました。ただし、バイナリ互換性を維持しながら重複を削減するには、ソース互換性のない変更を削除する必要がありました。影響を受ける呼び出しは .isEmpty.getLast().getFirst() です。(Ie36ce

  • LruCache を Kotlin に変換します(Ia2f19

  • SparseArrayCompat を Kotlin に変換します。(If6fe8

    SparseArrayCompat.valueAt() に小さな動作変更が追加されました。これにより、size() の境界外であるものの、指定された初期容量内にある初期化されていない呼び出しに対して、誤って null が返されることはなくなりました。

    また、この変更により、以前はなかった一部の型に正しい null 可能性が導入されました。

    • .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 に含まれる commit については、こちらをご覧ください

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 に含まれる commit については、こちらをご覧ください

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 に含まれる commit については、こちらをご覧ください

バグの修正

  • 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 に含まれる commit については、こちらをご覧ください

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 に含まれる commit については、こちらをご覧ください。

以下に、1.0.0 から 1.1.0 への変更の概要を示します。

新機能

  • 「collection-ktx」アーティファクトの contains 関数と isNotEmpty 関数に効率の良い実装を使用します(aosp/866529

API の変更

  • putIfAbsentLongSparseArraySimpleArrayMapSparseArrayCompat に追加しました(aosp/772608
  • getOrDefaultSimpleArrayMap に追加しました(aosp/772607
  • 2 つの引数の removeLongSparseArraySimpleArrayMapSparseArrayCompat に追加しました。この機能に対応する KTX 拡張機能のサポートを終了します(aosp/772482
  • 2 つの引数の replaceLongSparseArraySimpleArrayMapSparseArrayCompat に追加しました(aosp/772483
  • 3 つの引数の replaceLongSparseArraySimpleArrayMapSparseArrayCompat に追加しました(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 がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。

新機能

  • 「collection-ktx」アーティファクトの contains 関数と isNotEmpty 関数に効率の良い実装を使用します(aosp/866529

バージョン 1.1.0-beta01

2019 年 4 月 3 日

androidx.collection:collection:1.1.0-beta01androidx.collection:collection-ktx:1.1.0-beta01 がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。

API の変更

  • @RestrictTo 値を変更したと alpha03 リリースノートで述べたメソッドを削除しました。現在に至るまでどの 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 がリリースされました。このバージョンに含まれる commit の完全なリストについては、こちらをご覧ください。e

API の変更

  • 以前 @RestrictTo(LIBRARY_GROUP) としてマークされていた ArraySet のメソッドが @RestrictTo(LIBRARY_GROUP_PREFIX) に変更されました。これは、現在は異なる Maven グループ ID にある他の AndroidX ライブラリによる従来どおりの使用をサポートするためです。このメソッドは、1.1.0-alpha04 で公開されるか削除されます。他のデベロッパーが取得しない特別な API を他の AndroidX ライブラリが取得すべきではないためです。

バージョン 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 の変更

  • putIfAbsentLongSparseArraySimpleArrayMapSparseArrayCompat に追加しました(aosp/772608
  • getOrDefaultSimpleArrayMap に追加しました(aosp/772607
  • 2 つの引数の removeLongSparseArraySimpleArrayMapSparseArrayCompat に追加しました。この機能に対応する KTX 拡張機能のサポートを終了します(aosp/772482
  • 2 つの引数の replaceLongSparseArraySimpleArrayMapSparseArrayCompat に追加しました(aosp/772483
  • 3 つの引数の replaceLongSparseArraySimpleArrayMapSparseArrayCompat に追加しました(aosp/772484