【Kotlin/Android】CopyOnWriteArrayListの使い方!
この記事からわかること
- Android Studio/KotlinのCopyOnWriteArrayListとは?
- スレッドセーフなリスト
- ConcurrentModificationException
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
環境
- Android Studio:Flamingo
- Kotlin:1.8.20
CopyOnWriteArrayListとは?
KotlinのCopyOnWriteArrayList
はスレッドセーフなコレクション型です。CopyOnWriteArrayList
は書き込み操作(追加、削除、更新)を行う際に内部的に新しいコピーを作成する特徴があります。通常のリストだとイテレーション(繰り返し処理)中にリストの要素に書き込み操作をした場合、ConcurrentModificationException
がスローされます。
ですがCopyOnWriteArrayList
を使用することでイテレーションしているときに書き込み操作を行なっても例外をスローせずに構造を変更することができます。
書き込み操作を行う際にコピーを生成するためパフォーマンスはそれほど良くないので注意が必要です。
ConcurrentModificationException
ConcurrentModificationException
はコレクションがイテレーションされている間にコレクションの構造が変更された場合にスローされる例外です。例えばforEach
中にremove
などを実行すると発生します。
private var list = mutableListOf(1,2,3,4,5)
list.forEach {
list.remove(it)
}
使い方
CopyOnWriteArrayList
をインスタンス化するにはデフォルトコンストラクタを使用することで空のCopyOnWriteArrayList
を生成することができます。初期要素を持たせたい場合は既存のコレクションを引数に渡すことで変換できます。
var emptyList = CopyOnWriteArrayList<Int>()
var numList = CopyOnWriteArrayList(mutableListOf(1,2,3,4,5))
あとは通常のコレクションを扱うように操作することが可能です。
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。