【Kotlin/Android】CopyOnWriteArrayListの使い方!

【Kotlin/Android】CopyOnWriteArrayListの使い方!

この記事からわかること

  • Android Studio/KotlinCopyOnWriteArrayListとは?
  • スレッドセーフリスト
  • ConcurrentModificationException

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

環境

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

あとは通常のコレクションを扱うように操作することが可能です。

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index