JavaTM 2 Platform
Standard Ed. 5.0

java.util.concurrent
クラス CopyOnWriteArrayList<E>

java.lang.Object
  上位を拡張 java.util.concurrent.CopyOnWriteArrayList<E>
型パラメータ:
E - コレクション内に存在する要素の型
すべての実装されたインタフェース:
Serializable, Cloneable, Iterable<E>, Collection<E>, List<E>, RandomAccess

public class CopyOnWriteArrayList<E>
extends Object
implements List<E>, RandomAccess, Cloneable, Serializable

基になる配列の新しいコピーを作成することにより、すべての変更操作 (追加、設定など) が実装される ArrayList のスレッドセーフな変数です。

通常、これは非常に効率が悪いのですが、トラバーサル操作が変更を数の点で大幅に上回る場合には、代替手段よりも効率が良い場合があります。また、これは、トラバーサルを同期できないか、そうすることを望まないが、並行スレッド間の干渉を排除する必要がある場合に有用です。「スナップショット」スタイルの反復子メソッドは、反復子の作成時点での配列状態への参照を使用します。この配列が、反復子の有効期間内に変更されることは決してないため、干渉は不可能であり、反復子は ConcurrentModificationException をスローしないことが保証されます。反復子は、反復子の作成以降のリストへの追加、削除、または変更を反映しません。反復子自身に対する要素変更操作 (削除、設定、および追加) は、サポートされません。これらのメソッドは、UnsupportedOperationException をスローします。

このクラスは、Java Collections Framework のメンバです。

導入されたバージョン:
1.5
関連項目:
直列化された形式

コンストラクタの概要
CopyOnWriteArrayList()
          空のリストを作成します。
CopyOnWriteArrayList(Collection<? extends E> c)
          指定された Collection の要素を含むリストを、Collection の反復子によって返される順序で作成します。
CopyOnWriteArrayList(E[] toCopyIn)
          指定された配列のコピーを保持する CopyOnWriteArrayList を新たに作成します。
 
メソッドの概要
 boolean add(E element)
          リストの最後に、指定された要素を追加します。
 void add(int index, E element)
          リストの指定された位置に、指定された要素を挿入します。
 boolean addAll(Collection<? extends E> c)
          指定された Collection 内のすべての要素を、指定された Collection の反復子により返される順序でこのリストの最後に追加します。
 boolean addAll(int index, Collection<? extends E> c)
          リスト内の指定された位置から、指定された Collection のすべての要素を挿入します。
 int addAllAbsent(Collection<? extends E> c)
          このリストに含まれていない、指定された Collection 内のすべての要素を、指定された Collection の反復子により返される順序でこのリストの最後に追加します。
 boolean addIfAbsent(E element)
          要素が存在しない場合、要素を追加します。
 void clear()
          リストからすべての要素を削除します。
 Object clone()
          リストのシャローコピーを返します。
 boolean contains(Object elem)
          リストに指定された要素がある場合に true を返します。
 boolean containsAll(Collection<?> c)
          この Collection 内に、指定された Collection のすべての要素がある場合に true を返します。
 boolean equals(Object o)
          指定された Object が List と等しいかどうかを比較します。
 E get(int index)
          リスト内の指定された位置にある要素を返します。
 int hashCode()
          この List のハッシュコード値を返します。
 int indexOf(E elem, int index)
          equals メソッドを使用して等しいかどうかを判定しながら、指定された引数と同じ内容の要素を指定された index から検索します。
 int indexOf(Object elem)
          equals メソッドを使用して等しいかどうかを判定しながら、指定された引数と同じ内容の要素を先頭から検索します。
 boolean isEmpty()
          リストに要素がないかどうかを判定します。
 Iterator<E> iterator()
          このコレクションに含まれる要素の Iterator を返します。
 int lastIndexOf(E elem, int index)
          指定されたインデックスから後向きに指定されたオブジェクトを検索し、検出されたインデックスを返します。
 int lastIndexOf(Object elem)
          指定されたオブジェクトがリスト内で最後に現れるインデックスを返します。
 ListIterator<E> listIterator()
          この List 内の要素の Iterator を適切な順序で返します。
 ListIterator<E> listIterator(int index)
          この List 内の要素の ListIterator を、List 内の指定された位置から始まり適切な順序で返します。
 E remove(int index)
          リスト内の指定された位置から要素を削除します。
 boolean remove(Object o)
          指定された要素のインスタンスがこのリストにあれば、そのインスタンスをリストから 1 つ削除します (任意のオペレーション)。
 boolean removeAll(Collection<?> c)
          指定された Collection に含まれるすべての要素を、この Collection から削除します。
 boolean retainAll(Collection<?> c)
          この Collection において、指定された Collection に格納されている要素だけを保持します (任意のオペレーション)。
 E set(int index, E element)
          リストの指定された位置にある要素を、指定された要素で置き換えます。
 int size()
          リスト内にある要素の数を返します。
 List<E> subList(int fromIndex, int toIndex)
          この List の fromIndex (これを含む) と toIndex (これを含まない) の間の部分のビューを返します。
 Object[] toArray()
          リスト内のすべての要素が正しい順序で格納されている配列を返します。
<T> T[]
toArray(T[] a)
          リスト内のすべての要素が正しい順序で格納されている配列を返します。
 String toString()
          各要素の String 表現を保持している、Collection の文字列表現を返します。
 
クラス java.lang.Object から継承されたメソッド
finalize, getClass, notify, notifyAll, wait, wait, wait
 

コンストラクタの詳細

CopyOnWriteArrayList

public CopyOnWriteArrayList()
空のリストを作成します。


CopyOnWriteArrayList

public CopyOnWriteArrayList(Collection<? extends E> c)
指定された Collection の要素を含むリストを、Collection の反復子によって返される順序で作成します。

パラメータ:
c - 最初に保持していた要素のコレクション

CopyOnWriteArrayList

public CopyOnWriteArrayList(E[] toCopyIn)
指定された配列のコピーを保持する CopyOnWriteArrayList を新たに作成します。

パラメータ:
toCopyIn - 配列 (この配列のコピーは内部配列として使用される)
メソッドの詳細

size

public int size()
リスト内にある要素の数を返します。

定義:
インタフェース Collection<E> 内の size
定義:
インタフェース List<E> 内の size
戻り値:
リスト内の要素数

isEmpty

public boolean isEmpty()
リストに要素がないかどうかを判定します。

定義:
インタフェース Collection<E> 内の isEmpty
定義:
インタフェース List<E> 内の isEmpty
戻り値:
リストに要素がない場合は true、そうでない場合は false

contains

public boolean contains(Object elem)
リストに指定された要素がある場合に true を返します。

定義:
インタフェース Collection<E> 内の contains
定義:
インタフェース List<E> 内の contains
パラメータ:
elem - リストにあるかどうかを調べる要素
戻り値:
指定された要素がある場合は true、そうでない場合は false

indexOf

public int indexOf(Object elem)
equals メソッドを使用して等しいかどうかを判定しながら、指定された引数と同じ内容の要素を先頭から検索します。

定義:
インタフェース List<E> 内の indexOf
パラメータ:
elem - オブジェクト
戻り値:
リスト内で引数が最初に現れるインデックス。オブジェクトが見つからない場合は -1
関連項目:
Object.equals(Object)

indexOf

public int indexOf(E elem,
                   int index)
equals メソッドを使用して等しいかどうかを判定しながら、指定された引数と同じ内容の要素を指定された index から検索します。

パラメータ:
elem - オブジェクト
index - 検索を開始する位置のインデックス
戻り値:
オブジェクト引数が List 内で最初に現れるインデックス (List の index またはそれ以降の位置)。オブジェクトが見つからない場合は -1
関連項目:
Object.equals(Object)

lastIndexOf

public int lastIndexOf(Object elem)
指定されたオブジェクトがリスト内で最後に現れるインデックスを返します。

定義:
インタフェース List<E> 内の lastIndexOf
パラメータ:
elem - 目的の要素
戻り値:
リストで指定されたオブジェクトと一致する最後のオブジェクトのインデックス。オブジェクトが見つからない場合は -1

lastIndexOf

public int lastIndexOf(E elem,
                       int index)
指定されたインデックスから後向きに指定されたオブジェクトを検索し、検出されたインデックスを返します。

パラメータ:
elem - 目的の要素
index - 検索を開始する位置のインデックス
戻り値:
指定されたオブジェクトが List 内で最後に現れるインデックス (List のインデックスよりも前の位置)。オブジェクトが見つからない場合は -1

clone

public Object clone()
リストのシャローコピーを返します。要素自体はコピーされません。

オーバーライド:
クラス Object 内の clone
戻り値:
このリストの複製
関連項目:
Cloneable

toArray

public Object[] toArray()
リスト内のすべての要素が正しい順序で格納されている配列を返します。

定義:
インタフェース Collection<E> 内の toArray
定義:
インタフェース List<E> 内の toArray
戻り値:
リスト内のすべての要素が正しい順序で格納されている配列
関連項目:
Arrays.asList(Object[])

toArray

public <T> T[] toArray(T[] a)
リスト内のすべての要素が正しい順序で格納されている配列を返します。返される配列の実行時の型は指定された配列の型になります。指定された配列にリストが収まる場合は、その配列に返されます。それ以外の場合は、指定された配列の実行時の型とリストのサイズを使用して新しい配列が割り当てられます。

指定された配列にリストが収まってもさらにスペースがある場合、つまり配列にリストより多くの要素がある場合は、コレクションの最後の直後にある配列内の要素は null に設定されます。これは、呼び出し側がリストに null 要素が含まれていないことがわかっている場合には、リストの長さを判定するのに利用できます。

定義:
インタフェース Collection<E> 内の toArray
定義:
インタフェース List<E> 内の toArray
パラメータ:
a - 配列が十分な大きさを持つ場合は、リストの要素が格納される配列。そうでない場合は、要素を格納するために同じ実行時の型の新しい配列が割り当てられる
戻り値:
リストの要素が格納されている配列
例外:
ArrayStoreException - a の実行時の型が、リスト内の各要素の実行時の型のスーパータイプでない場合

get

public E get(int index)
リスト内の指定された位置にある要素を返します。

定義:
インタフェース List<E> 内の get
パラメータ:
index - 返される要素のインデックス
戻り値:
リスト内の指定された位置にある要素
例外:
IndexOutOfBoundsException - インデックスが範囲外の場合 (index < 0 || index >= size())

set

public E set(int index,
             E element)
リストの指定された位置にある要素を、指定された要素で置き換えます。

定義:
インタフェース List<E> 内の set
パラメータ:
index - 置換される要素のインデックス
element - 指定された位置に格納される要素
戻り値:
指定された位置に以前あった要素
例外:
IndexOutOfBoundsException - インデックスが範囲外の場合 (index < 0 || index >= size())

add

public boolean add(E element)
リストの最後に、指定された要素を追加します。

定義:
インタフェース Collection<E> 内の add
定義:
インタフェース List<E> 内の add
パラメータ:
element - リストに追加される要素
戻り値:
true (Collection.add の汎用規約どおり)

add

public void add(int index,
                E element)
リストの指定された位置に、指定された要素を挿入します。現在その位置にある要素と後続の要素は右に移動します (インデックス値に 1 を加算)。

定義:
インタフェース List<E> 内の add
パラメータ:
index - 指定された要素が挿入されるインデックス
element - 挿入される要素
例外:
IndexOutOfBoundsException - インデックスが範囲外の場合 (index < 0 || index > size())

remove

public E remove(int index)
リスト内の指定された位置から要素を削除します。そして、後続の要素を左側に移動し、それぞれのインデックスから 1 を減算します。

定義:
インタフェース List<E> 内の remove
パラメータ:
index - 削除される要素のインデックス
戻り値:
リストから削除した要素
例外:
IndexOutOfBoundsException - インデックスが範囲外の場合 (index < 0 || index >= size())

remove

public boolean remove(Object o)
指定された要素のインスタンスがこのリストにあれば、そのインスタンスをリストから 1 つ削除します (任意のオペレーション)。より厳密に言えば、(o==null ? e==null : o.equals(e)) を満たす要素 e がリストに 1 つ以上あれば、e を 1 つ削除します。指定された要素がリストに含まれていた場合、つまり、呼び出しの結果としてリストが変更された場合に true を返します。

定義:
インタフェース Collection<E> 内の remove
定義:
インタフェース List<E> 内の remove
パラメータ:
o - リストから削除される要素 (その要素がある場合)
戻り値:
リストに、指定された要素が格納されている場合は true

addIfAbsent

public boolean addIfAbsent(E element)
要素が存在しない場合、要素を追加します。

パラメータ:
element - Collection に追加される要素 (要素が存在しない場合)
戻り値:
追加された場合は true

containsAll

public boolean containsAll(Collection<?> c)
この Collection 内に、指定された Collection のすべての要素がある場合に true を返します。

この実装は指定された Collection の内容を次々調べ、Iterator によって返された各要素について、この Collection に含まれるかどうかを順番に確認します。すべての要素がこの Collection にある場合は true を返し、そうでない場合は false を返します。

定義:
インタフェース Collection<E> 内の containsAll
定義:
インタフェース List<E> 内の containsAll
パラメータ:
c - コレクション
戻り値:
すべての要素が含まれる場合は true
関連項目:
Collection.contains(Object)

removeAll

public boolean removeAll(Collection<?> c)
指定された Collection に含まれるすべての要素を、この Collection から削除します。これは、内部に一時配列が必要になるため、このクラス内で特に負荷の大きい動作です。

定義:
インタフェース Collection<E> 内の removeAll
定義:
インタフェース List<E> 内の removeAll
パラメータ:
c - コレクション
戻り値:
この Collection が呼び出しの結果として変更された場合は true
関連項目:
Collection.remove(Object), Collection.contains(Object)

retainAll

public boolean retainAll(Collection<?> c)
この Collection において、指定された Collection に格納されている要素だけを保持します (任意のオペレーション)。つまり、指定された Collection に格納されていないすべての要素をこの Collection から削除します。

定義:
インタフェース Collection<E> 内の retainAll
定義:
インタフェース List<E> 内の retainAll
パラメータ:
c - コレクション
戻り値:
この Collection が呼び出しの結果として変更された場合は true
関連項目:
Collection.remove(Object), Collection.contains(Object)

addAllAbsent

public int addAllAbsent(Collection<? extends E> c)
このリストに含まれていない、指定された Collection 内のすべての要素を、指定された Collection の反復子により返される順序でこのリストの最後に追加します。

パラメータ:
c - リストに追加される要素
戻り値:
追加する要素の数

clear

public void clear()
リストからすべての要素を削除します。

定義:
インタフェース Collection<E> 内の clear
定義:
インタフェース List<E> 内の clear

addAll

public boolean addAll(Collection<? extends E> c)
指定された Collection 内のすべての要素を、指定された Collection の反復子により返される順序でこのリストの最後に追加します。

定義:
インタフェース Collection<E> 内の addAll
定義:
インタフェース List<E> 内の addAll
パラメータ:
c - リストに挿入される要素
戻り値:
いずれかの要素が追加される場合は true
関連項目:
Collection.add(Object)

addAll

public boolean addAll(int index,
                      Collection<? extends E> c)
リスト内の指定された位置から、指定された Collection のすべての要素を挿入します。その時点で、指定された位置に要素がある場合、その位置の要素を移動させ、後続の要素を右側に移動して、それぞれのインデックスを増やします。新しい要素は、指定された Collection の反復子が返す順序でリストに格納されます。

定義:
インタフェース List<E> 内の addAll
パラメータ:
index - 指定されたコレクションから最初の要素を挿入する位置のインデックス
c - リストに挿入される要素
戻り値:
いずれかの要素が追加される場合は true
例外:
IndexOutOfBoundsException - インデックスが範囲外の場合 (index < 0 || index > size())

toString

public String toString()
各要素の String 表現を保持している、Collection の文字列表現を返します。

オーバーライド:
クラス Object 内の toString
戻り値:
このオブジェクトの文字列表現

equals

public boolean equals(Object o)
指定された Object が List と等しいかどうかを比較します。指定された Object も List で、2 つの List がどちらとも同じサイズであり、2 つの List の対応する要素ペアがすべて等しい場合にだけ、true を返します。2 つの要素 e1e2 は、(e1==null ? e2==null : e1.equals(e2)) である場合に等しくなります。つまり、同じ順序で同じ要素を保持している場合に、2 つの List は等しいものと判定されます。

この実装は、最初に、指定されたオブジェクトがこの List であるかどうかを調べます。この List である場合、実装は true を返します。そうでない場合は、指定されたオブジェクトが List かどうかを調べ、List でなければ false を返します。指定されたオブジェクトが List の場合は、両方のリストの内容を次々調べて、要素の対応するペアを比較します。比較の結果 false が返されることがあれば、このメソッドも false を返します。どちらかの Iterator の要素が先になくなった場合は、2 つの List の長さが等しくないので false を返します。そうでない場合は、繰り返しが完了した時点で true を返します。

定義:
インタフェース Collection<E> 内の equals
定義:
インタフェース List<E> 内の equals
オーバーライド:
クラス Object 内の equals
パラメータ:
o - List と等しいかどうかを比較する Object
戻り値:
指定された Object がこの List と等しい場合は true
関連項目:
Object.hashCode(), Hashtable

hashCode

public int hashCode()
この List のハッシュコード値を返します。

この実装は、List.hashCode() 内の定義を使用します。

定義:
インタフェース Collection<E> 内の hashCode
定義:
インタフェース List<E> 内の hashCode
オーバーライド:
クラス Object 内の hashCode
戻り値:
ハッシュコード
関連項目:
Object.equals(java.lang.Object), Hashtable

iterator

public Iterator<E> iterator()
このコレクションに含まれる要素の Iterator を返します。反復子は、反復子構築時のリスト状態のスナップショットを提供します。反復子のトラバーサル中に同期化は不要です。反復子は、remove メソッドをサポートしません。

定義:
インタフェース Iterable<E> 内の iterator
定義:
インタフェース Collection<E> 内の iterator
定義:
インタフェース List<E> 内の iterator
戻り値:
反復子

listIterator

public ListIterator<E> listIterator()
この List 内の要素の Iterator を適切な順序で返します。反復子は、反復子構築時のリスト状態のスナップショットを提供します。反復子のトラバーサル中に同期化は不要です。反復子は、removeset、および add メソッドをサポートしません。

定義:
インタフェース List<E> 内の listIterator
戻り値:
反復子

listIterator

public ListIterator<E> listIterator(int index)
この List 内の要素の ListIterator を、List 内の指定された位置から始まり適切な順序で返します。指定されたインデックスは、nextElement の最初の呼び出しにより返される最初の要素を示します。previousElement の最初の呼び出しにより、指定されたインデックスから 1 を減算した値を持つ要素が返されます。この実装により返される ListIterator は、remove、set、および add メソッドで UnsupportedOperationException をスローします。

定義:
インタフェース List<E> 内の listIterator
パラメータ:
index - getNext の呼び出しにより ListIterator から返される最初の要素のインデックス
戻り値:
反復子
例外:
IndexOutOfBoundsException - インデックスが範囲外の場合 (index < 0 || index > size())

subList

public List<E> subList(int fromIndex,
                       int toIndex)
この List の fromIndex (これを含む) と toIndex (これを含まない) の間の部分のビューを返します。返される List はこの List に基づいているため、返される List 内での変更はこの List に反映され、この List 内での変更は返される List に反映されます。変更操作はサポートされていますが、これらが CopyOnWriteArrayLists の役に立つことはあまりありません。

基づくリスト (つまりこの List) が、返された List を介さずに「構造的に変更」された場合、このメソッドによって返された List のセマンティクスは、保証されません。構造的な変更とは、List のサイズが変更された場合や、進行中の繰り返しにより不正な結果が生じたなどの理由で List が乱れた場合です。

定義:
インタフェース List<E> 内の subList
パラメータ:
fromIndex - subList の下端点 (これを含む)
toIndex - subList の上端点 (これを含まない)
戻り値:
この List 内の指定された範囲のビュー
例外:
IndexOutOfBoundsException - 不正な端点のインデックス値 (fromIndex < 0 || toIndex > size || fromIndex > toIndex)

JavaTM 2 Platform
Standard Ed. 5.0

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java 2 SDK SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。