【Kotlin/Android】CopyOnWriteArrayListの使い方!
この記事からわかること
- Android Studio/KotlinのCopyOnWriteArrayListとは?
- スレッドセーフなリスト
- ConcurrentModificationException
index
[open]
\ アプリをリリースしました /
環境
- 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))
あとは通常のコレクションを扱うように操作することが可能です。
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。







