public class Collections extends Object
このクラスのメソッドに提供されるコレクションまたはクラスオブジェクトが null の場合、このクラスのメソッドは NullPointerException をすべてスローします。
このクラスにあるさまざまなアルゴリズムのドキュメントには、通常、実装の簡単な説明が含まれています。この説明は、仕様の一部ではなく実装情報と考えてください。実装者は、仕様に反しないかぎり、ほかのアルゴリズムを自由に使用できます。たとえば、sort が使用するアルゴリズムはマージソートである必要はありませんが、固定 (stable) のアルゴリズムでなければいけません。
コレクションが set メソッドのような適切な変異プリミティブ型メソッドをサポートしていない場合、このクラス (処理されるコレクションを修正するアルゴリズム) に含まれていた「破壊的」アルゴリズムは、UnsupportedOperationException をスローするように指定されています。呼び出しがコレクションに影響しない場合、こうしたアルゴリズムは例外をスローする場合がありますが、必須ではありません。たとえば、ソート済みの変更不可能なリストで、sort メソッドを呼び出すと、UnsupportedOperationException がスローされる場合とスローされない場合があります。
このクラスは、Java Collections Framework のメンバーです。
Collection
, Set
, List
, Map
修飾子と型 | フィールドと説明 |
---|---|
static List |
EMPTY_LIST
空のリストです (不変)。
|
static Map |
EMPTY_MAP
空のマップです (不変)。
|
static Set |
EMPTY_SET
空のセットです (不変)。
|
修飾子と型 | メソッドと説明 |
---|---|
static <T> boolean |
addAll(Collection<? super T> c, T... elements)
指定されたすべての要素を指定されたコレクションに追加します。
|
static <T> Queue<T> |
asLifoQueue(Deque<T> deque)
|
static <T> int |
binarySearch(List<? extends Comparable<? super T>> list, T key)
バイナリサーチアルゴリズムを使用して、指定されたリストから指定されたオブジェクトを検索します。
|
static <T> int |
binarySearch(List<? extends T> list, T key, Comparator<? super T> c)
バイナリサーチアルゴリズムを使用して、指定されたリストから指定されたオブジェクトを検索します。
|
static <E> Collection<E> |
checkedCollection(Collection<E> c, Class<E> type)
指定されたコレクションの、動的に型保証されたビューを返します。
|
static <E> List<E> |
checkedList(List<E> list, Class<E> type)
指定されたリストの動的に型保証されたビューを返します。
|
static <K,V> Map<K,V> |
checkedMap(Map<K,V> m, Class<K> keyType, Class<V> valueType)
指定されたマップの動的に型保証されたビューを返します。
|
static <E> Set<E> |
checkedSet(Set<E> s, Class<E> type)
指定されたセットの動的に型保証されたビューを返します。
|
static <K,V> SortedMap<K,V> |
checkedSortedMap(SortedMap<K,V> m, Class<K> keyType, Class<V> valueType)
指定されたソートマップの動的に型保証されたビューを返します。
|
static <E> SortedSet<E> |
checkedSortedSet(SortedSet<E> s, Class<E> type)
指定されたソートセットの動的に型保証されたビューを返します。
|
static <T> void |
copy(List<? super T> dest, List<? extends T> src)
あるリストから別のリストにすべての要素をコピーします。
|
static boolean |
disjoint(Collection<?> c1, Collection<?> c2)
指定された 2 つのコレクションに共通の要素が存在しない場合、
true を返します。 |
static <T> Enumeration<T> |
emptyEnumeration()
要素が 1 つも含まれていない列挙を返します。
|
static <T> Iterator<T> |
emptyIterator()
要素が 1 つも含まれていないイテレータを返します。
|
static <T> List<T> |
emptyList()
空のリストを返します (不変)。
|
static <T> ListIterator<T> |
emptyListIterator()
要素が 1 つも含まれていないリストイテレータを返します。
|
static <K,V> Map<K,V> |
emptyMap()
空のマップを返します (不変)。
|
static <T> Set<T> |
emptySet()
空のセット (不変) を返します。
|
static <T> Enumeration<T> |
enumeration(Collection<T> c)
指定されたコレクションの列挙を返します。
|
static <T> void |
fill(List<? super T> list, T obj)
指定されたリストのすべての要素を指定された要素で置き換えます。
|
static int |
frequency(Collection<?> c, Object o)
指定されたコレクション内で、指定されたオブジェクトと等価な要素の数を返します。
|
static int |
indexOfSubList(List<?> source, List<?> target)
指定されたソースリスト内で、指定されたターゲットリストが最初に出現した位置の開始位置を返します。こうした出現がない場合は -1 を返します。
|
static int |
lastIndexOfSubList(List<?> source, List<?> target)
指定されたソースリスト内で、最後に出現した指定ターゲットリストの開始位置を返します。こうした出現がない場合は -1 を返します。
|
static <T> ArrayList<T> |
list(Enumeration<T> e)
指定された列挙により返された要素を含む配列リストを、返された順番で返します。
|
static <T extends Object & Comparable<? super T>> |
max(Collection<? extends T> coll)
要素の自然順序付けに従って、指定されたコレクションの最大の要素を返します。
|
static <T> T |
max(Collection<? extends T> coll, Comparator<? super T> comp)
指定されたコンパレータが示す順序に従って、指定されたコレクションの最大の要素を返します。
|
static <T extends Object & Comparable<? super T>> |
min(Collection<? extends T> coll)
要素の自然順序付けに従って、指定されたコレクションの最小の要素を返します。
|
static <T> T |
min(Collection<? extends T> coll, Comparator<? super T> comp)
指定されたコンパレータが示す順序に従って、指定されたコレクションの最小の要素を返します。
|
static <T> List<T> |
nCopies(int n, T o)
指定されたオブジェクトの n 個のコピーで構成される不変のリストを返します。
|
static <E> Set<E> |
newSetFromMap(Map<E,Boolean> map)
指定されたマップに連動するセットを返します。
|
static <T> boolean |
replaceAll(List<T> list, T oldVal, T newVal)
リスト内に出現する指定された値をすべてほかの値に置き換えます。
|
static void |
reverse(List<?> list)
指定されたリストの要素の順序を逆にします。
|
static <T> Comparator<T> |
reverseOrder()
Comparable インタフェースを実装するオブジェクトのコレクションで自然順序付けの逆を義務付けるコンパレータを返します。 |
static <T> Comparator<T> |
reverseOrder(Comparator<T> cmp)
指定されたコンパレータの逆順を義務付けるコンパレータを返します。
|
static void |
rotate(List<?> list, int distance)
指定されたリストの要素を、指定された距離により回転します。
|
static void |
shuffle(List<?> list)
デフォルトの乱数発生の元を使用して、指定されたリストの順序を無作為に入れ替えます。
|
static void |
shuffle(List<?> list, Random rnd)
指定された乱数発生の元を使用して、指定されたリストの順序を無作為に入れ替えます。
|
static <T> Set<T> |
singleton(T o)
指定されたオブジェクトだけを格納している不変のセットを返します。
|
static <T> List<T> |
singletonList(T o)
指定されたオブジェクトだけを格納している不変のリストを返します。
|
static <K,V> Map<K,V> |
singletonMap(K key, V value)
指定された値に指定されたキーだけをマッピングする不変のマップを返します。
|
static <T extends Comparable<? super T>> |
sort(List<T> list)
指定されたリストを、その要素の自然順序付けに従って昇順にソートします。
|
static <T> void |
sort(List<T> list, Comparator<? super T> c)
指定されたコンパレータが示す順序に従って、指定されたリストをソートします。
|
static void |
swap(List<?> list, int i, int j)
指定されたリストの指定された位置にある要素をスワップします。
|
static <T> Collection<T> |
synchronizedCollection(Collection<T> c)
指定されたコレクションに連動する同期 (スレッドセーフな) コレクションを返します。
|
static <T> List<T> |
synchronizedList(List<T> list)
指定されたリストに連動する同期 (スレッドセーフな) リストを返します。
|
static <K,V> Map<K,V> |
synchronizedMap(Map<K,V> m)
指定されたマップに連動する同期 (スレッドセーフな) マップを返します。
|
static <T> Set<T> |
synchronizedSet(Set<T> s)
指定されたセットに連動する同期 (スレッドセーフな) セットを返します。
|
static <K,V> SortedMap<K,V> |
synchronizedSortedMap(SortedMap<K,V> m)
指定されたソートマップに連動する同期 (スレッドセーフな) ソートマップを返します。
|
static <T> SortedSet<T> |
synchronizedSortedSet(SortedSet<T> s)
指定されたソートセットに連動する同期 (スレッドセーフな) ソートセットを返します。
|
static <T> Collection<T> |
unmodifiableCollection(Collection<? extends T> c)
指定されたコレクションの変更不可能なビューを返します。
|
static <T> List<T> |
unmodifiableList(List<? extends T> list)
指定されたリストの変更不可能なビューを返します。
|
static <K,V> Map<K,V> |
unmodifiableMap(Map<? extends K,? extends V> m)
指定されたマップの変更不可能なビューを返します。
|
static <T> Set<T> |
unmodifiableSet(Set<? extends T> s)
指定されたセットの変更不可能なビューを返します。
|
static <K,V> SortedMap<K,V> |
unmodifiableSortedMap(SortedMap<K,? extends V> m)
指定されたソートマップの変更不可能なビューを返します。
|
static <T> SortedSet<T> |
unmodifiableSortedSet(SortedSet<T> s)
指定されたソートセットの変更不可能なビューを返します。
|
public static final Set EMPTY_SET
emptySet()
public static final List EMPTY_LIST
emptyList()
public static final Map EMPTY_MAP
emptyMap()
public static <T extends Comparable<? super T>> void sort(List<T> list)
Comparable
インタフェースを実装する必要があります。また、リストのすべての要素は、相互に比較可能でなければいけません。つまり、リストの要素が e1
および e2
の場合に、e1.compareTo(e2)
で ClassCastException
をスローすべきではありません。
このソートは固定であることが保証されています。つまり、ソートを実行しても、同等の要素の順序は変わりません。
指定されたリストは変更可能でなければなりませんが、サイズ変更はできなくてもかまいません。
実装にあたっての注意:この実装は安定した適応型の反復マージソートです。このソートでは、入力配列がランダムに順序付けられる場合は従来のマージソートのパフォーマンスを提供しながら、入力配列が部分的にソートされている場合は必要となる比較回数が n lg(n) よりもかなり少なくなります。入力配列がほとんどソートされている場合、この実装ではおよそ n 回の比較が必要になります。一時ストレージの要件は、ほとんどソートされている入力配列用の小さな定数から、ランダムに順序付けられた入力配列用の n/2 のオブジェクト参照までさまざまです。
この実装では、その入力配列で昇順と降順を等しく利用するため、同じ入力配列のさまざまな部分で昇順と降順を利用できます。それは 2 つ以上のソートされた配列をマージするのに最適です。つまり、それらの配列を連結し、結果となる配列をソートするだけです。
この実装は、Tim Peters 氏による Python 用のリストソート (TimSort) から応用されました。それは、『Proceedings of the Fourth Annual ACM-SIAM Symposium on Discrete Algorithms』(1993 年 1 月) の 467 - 474 ページに記載されている、Peter McIlroy 氏の「Optimistic Sorting and Information Theoretic Complexity」からの技術を採用しています。
この実装は、指定されたリストの配列へのダンプ、配列のソート、リストの繰り返し処理を行うことにより、配列の対応する位置から各要素を再設定します。これは、リンクされたリストを適所にソートしようとした場合の n2 log(n) のパフォーマンスになるのを回避します。
list
- ソートされるリスト。ClassCastException
- リストに相互に比較可能でない要素 (たとえば、文字列と整数) がある場合。UnsupportedOperationException
- 指定されたリストのリストイテレータが set
オペレーションをサポートしない場合。IllegalArgumentException
- (オプション) リスト要素の自然順序付けが Comparable
の規約に違反していることが実装によって検出された場合public static <T> void sort(List<T> list, Comparator<? super T> c)
e1
および e2
の場合に、c.compare(e1, e2)
で ClassCastException
をスローすべきではありません。
このソートは固定であることが保証されています。つまり、ソートを実行しても、同等の要素の順序は変わりません。
指定されたリストは変更可能でなければなりませんが、サイズ変更はできなくてもかまいません。
実装にあたっての注意:この実装は安定した適応型の反復マージソートです。このソートでは、入力配列がランダムに順序付けられる場合は従来のマージソートのパフォーマンスを提供しながら、入力配列が部分的にソートされている場合は必要となる比較回数が n lg(n) よりもかなり少なくなります。入力配列がほとんどソートされている場合、この実装ではおよそ n 回の比較が必要になります。一時ストレージの要件は、ほとんどソートされている入力配列用の小さな定数から、ランダムに順序付けられた入力配列用の n/2 のオブジェクト参照までさまざまです。
この実装では、その入力配列で昇順と降順を等しく利用するため、同じ入力配列のさまざまな部分で昇順と降順を利用できます。それは 2 つ以上のソートされた配列をマージするのに最適です。つまり、それらの配列を連結し、結果となる配列をソートするだけです。
この実装は、Tim Peters 氏による Python 用のリストソート (TimSort) から応用されました。それは、『Proceedings of the Fourth Annual ACM-SIAM Symposium on Discrete Algorithms』(1993 年 1 月) の 467 - 474 ページに記載されている、Peter McIlroy 氏の「Optimistic Sorting and Information Theoretic Complexity」からの技術を採用しています。
この実装は、指定されたリストの配列へのダンプ、配列のソート、リストの繰り返し処理を行うことにより、配列の対応する位置から各要素を再設定します。これは、リンクされたリストを適所にソートしようとした場合の n2 log(n) のパフォーマンスになるのを回避します。
list
- ソートされるリスト。c
- リストの順序を決定するコンパレータ。null
値は、要素の自然順序付けが使用されることを示す。ClassCastException
- リストに、指定されたコンパレータで相互に比較できない要素がある場合。UnsupportedOperationException
- 指定されたリストのリストイテレータが set
オペレーションをサポートしない場合。IllegalArgumentException
- (オプション) コンパレータが Comparator
の規約に違反していることが検出された場合public static <T> int binarySearch(List<? extends Comparable<? super T>> list, T key)
sort(List)
メソッドを使用して要素の自然順序付けに従って昇順にソートする必要があります。リストがソートされていない場合、結果は定義されません。指定されたオブジェクトと等しい要素がリストに複数ある場合、どれが見つかるかは保証されません。
「ランダムアクセス」リストの場合、このメソッドは log(n) 時間で動作します (位置を指定したアクセスにほぼ一定の時間が必要)。指定されたリストが RandomAccess
インタフェースを実装しない、大きなリストである場合、このメソッドは O(n) リンクトラバーサルと O(log n) 要素比較を実行するイテレータベースのバイナリサーチを行います。
list
- 検索されるリスト。key
- 検索されるキー。ClassCastException
- リストに相互に比較可能でない要素 (たとえば、文字列と整数) がある場合、または検索キーがリストの要素と相互に比較可能でない場合。public static <T> int binarySearch(List<? extends T> list, T key, Comparator<? super T> c)
sort(List, Comparator)
メソッドを使用して、指定されたコンパレータに従って昇順にソートしなければいけません。リストがソートされていない場合、結果は定義されません。指定されたオブジェクトと等しい要素がリストに複数ある場合、どれが見つかるかは保証されません。
「ランダムアクセス」リストの場合、このメソッドは log(n) 時間で動作します (位置を指定したアクセスにほぼ一定の時間が必要)。指定されたリストが RandomAccess
インタフェースを実装しない、大きなリストである場合、このメソッドは O(n) リンクトラバーサルと O(log n) 要素比較を実行するイテレータベースのバイナリサーチを行います。
list
- 検索されるリスト。key
- 検索されるキー。c
- リストが順序付けされるコンパレータ。null 値は、要素の自然順序付けが使用されることを示す。ClassCastException
- リストに指定されたコンパレータで相互に比較可能でない要素がある場合、または検索キーがこのコンパレータを使ってリストの要素と相互に比較できない場合。public static void reverse(List<?> list)
このメソッドは一次時間で動作します。
list
- 要素の順序が逆にされるリスト。UnsupportedOperationException
- 指定されたリストまたはそのリストイテレータが set オペレーションをサポートしない場合。public static void shuffle(List<?> list)
上記の説明で「ほぼ」という言葉を使用しているのは、乱数発生の元となるデフォルトのソースが、独立して選択されたビットのソースとして偏りがないのは近似的にのみ成立するからです。ランダムに選択された完全なソースであれば、アルゴリズムが組み合わせを選択する確率は、完全に一様になります。
この実装は、リストの最後の要素から 2 番目の要素まで逆方向にトラバースし、無作為に選択された要素を「現在の位置」に繰り返し入れ替えます。要素は、リストの最初の要素から現在の位置までの範囲で無作為に選択されます。
このメソッドは一次時間で動作します。指定されたリストが RandomAccess
インタフェースを実装しない、大きなリストである場合、リストの順序を入れ替える前に、この実装は指定されたリストを配列へダンプして、次に入れ替えた配列をリストにダンプして戻します。適切に「順次アクセス」リストの順序を入れ替えることによって起こる 2 次動作を避けるためです。
list
- 順序が入れ替えられるリスト。UnsupportedOperationException
- 指定されたリストまたはそのリストイテレータが set オペレーションをサポートしない場合。public static void shuffle(List<?> list, Random rnd)
この実装は、リストの最後の要素から 2 番目の要素まで逆方向にトラバースし、無作為に選択された要素を「現在の位置」に繰り返し入れ替えます。要素は、リストの最初の要素から現在の位置までの範囲で無作為に選択されます。
このメソッドは一次時間で動作します。指定されたリストが RandomAccess
インタフェースを実装しない、大きなリストである場合、リストの順序を入れ替える前に、この実装は指定されたリストを配列へダンプして、次に入れ替えた配列をリストにダンプして戻します。適切に「順次アクセス」リストの順序を入れ替えることによって起こる 2 次動作を避けるためです。
list
- 順序が入れ替えられるリスト。rnd
- リストの順序を入れ替えるために使う乱数発生の元。UnsupportedOperationException
- 指定されたリストまたはそのリストイテレータが set オペレーションをサポートしない場合。public static void swap(List<?> list, int i, int j)
list
- 要素をスワップするリスト。i
- スワップされる 1 つの要素のインデックス。j
- スワップされるもう 1 つの要素のインデックス。IndexOutOfBoundsException
- i または j のいずれかが範囲外の場合 (i < 0 || i >= list.size() || j < 0 || j >= list.size())。public static <T> void fill(List<? super T> list, T obj)
このメソッドは一次時間で動作します。
list
- 指定された要素が挿入されるリスト。obj
- 指定されたリストに挿入される要素。UnsupportedOperationException
- 指定されたリストまたはそのリストイテレータが set オペレーションをサポートしない場合。public static <T> void copy(List<? super T> dest, List<? extends T> src)
このメソッドは一次時間で動作します。
dest
- コピー先のリスト。src
- コピー元のリスト。IndexOutOfBoundsException
- コピー先のリストがコピー元のリスト全体を格納するには小さすぎる場合。UnsupportedOperationException
- コピーリストのリストイテレータが set オペレーションをサポートしない場合。public static <T extends Object & Comparable<? super T>> T min(Collection<? extends T> coll)
このメソッドはコレクション全体で繰り返し処理を行うので、コレクションのサイズに比例した時間が必要です。
coll
- 最小の要素を決めるコレクション。ClassCastException
- コレクションに相互に比較可能でない要素 (たとえば、文字列と整数) がある場合。NoSuchElementException
- コレクションが空の場合。Comparable
public static <T> T min(Collection<? extends T> coll, Comparator<? super T> comp)
このメソッドはコレクション全体で繰り返し処理を行うので、コレクションのサイズに比例した時間が必要です。
coll
- 最小の要素を決めるコレクション。comp
- 最小の要素リストが決定されるコンパレータ。null 値は、要素の自然順序付けが使用されることを示す。ClassCastException
- コレクションに、指定されたコンパレータで相互に比較できない要素がある場合。NoSuchElementException
- コレクションが空の場合。Comparable
public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)
このメソッドはコレクション全体で繰り返し処理を行うので、コレクションのサイズに比例した時間が必要です。
coll
- 最大の要素を決めるコレクション。ClassCastException
- コレクションに相互に比較可能でない要素 (たとえば、文字列と整数) がある場合。NoSuchElementException
- コレクションが空の場合。Comparable
public static <T> T max(Collection<? extends T> coll, Comparator<? super T> comp)
このメソッドはコレクション全体で繰り返し処理を行うので、コレクションのサイズに比例した時間が必要です。
coll
- 最大の要素を決めるコレクション。comp
- 最大の要素リストを決定するコンパレータ。null 値は、要素の自然順序付けが使用されることを示す。ClassCastException
- コレクションに、指定されたコンパレータで相互に比較できない要素がある場合。NoSuchElementException
- コレクションが空の場合。Comparable
public static void rotate(List<?> list, int distance)
たとえば、list には [t, a, n, k, s] が含まれるとします。Collections.rotate(list, 1) (あるいは Collections.rotate(list, -4)) を呼び出したあと、list には [s, t, a, n, k] が含まれます。
このメソッドをサブリストに有効に適用して、残りの要素の順序を保存しながら、リスト内の 1 つまたは複数の要素を移動することができます。たとえば、次の慣用法は、インデックス j にある要素を位置 k に移動します (k は j はより大きいか、等値である必要があります)。
Collections.rotate(list.subList(j, k+1), -1);これを固定するために、list に [a, b, c, d, e] が含まれると仮定します。インデックス 1 (b) にある要素を 2 つの位置に進めるためには、次の呼び出しを実行します。
Collections.rotate(l.subList(1, 4), -1);その結果として得られるリストは [a, c, d, b, e] になります。
複数の要素を進めるためには、回転距離の絶対値を増加させます。後ろに移動させるには、正のシフト移動量を使用します。
指定された値が小さいリストであるか、RandomAccess
インタフェースを実装している場合、この実装は第 1 の要素を移動すべき位置に交換します。次に、置き換えられた要素が最初の要素にスワップされるまで、置き換えられた要素を移動すべき位置に繰り返し交換します。必要に応じて、回転が完了するまで、第 2 要素および連続する要素についてこのプロセスが繰り返されます。指定されたリストが大きく、RandomAccess インタフェースを実装していない場合、この実装は、インデックス -distance mod size の 2 つのサブリストビューにリストを分割します。次に、reverse(List)
メソッドは、それぞれのサブリストビューで呼び出され、最終的にはリスト全体で呼び出されます。2 つのアルゴリズムの詳細については、Jon Bentley の『Programming Pearls』(Addison-Wesley, 1986) のセクション 2.3 を参照してください。
list
- 回転されるリスト。distance
- リストを回転する距離。この値に制約はなく、値は 0 でも、負でも、list.size() より大きくてもかまわない。UnsupportedOperationException
- 指定されたリストまたはそのリストイテレータが set オペレーションをサポートしない場合。public static <T> boolean replaceAll(List<T> list, T oldVal, T newVal)
list
- 置換が生じるリスト。oldVal
- 置換前の値。newVal
- oldVal の置換後の値。UnsupportedOperationException
- 指定されたリストまたはそのリストイテレータが set オペレーションをサポートしない場合。public static int indexOfSubList(List<?> source, List<?> target)
この実装は、ソースリストをスキャニングする「強引な」技術を使用して、ソースリストの各位置でターゲットと一致するか順番に検索します。
source
- 最初に出現する target を検索するリスト。target
- source の subList として検索するリスト。public static int lastIndexOfSubList(List<?> source, List<?> target)
この実装では、ソースリストの繰り返し処理を行う「強引な」技術を使用して、各位置でターゲットと一致するか順番に検索します。
source
- 最後に出現する target を検索するリスト。target
- source の subList として検索するリスト。public static <T> Collection<T> unmodifiableCollection(Collection<? extends T> c)
返されたコレクションは、hashCode オペレーションおよび equals オペレーションを基となるコレクションに渡すことはなく、Object の equals メソッドおよび hashCode メソッドに依存します。これは、基となるコレクションがセットまたはリストの場合にそれらのオペレーションの規約を守るために必要です。
返されたコレクションは、指定されたコレクションが直列化可能の場合は直列化可能です。
c
- 変更不可能なビューが返されるコレクション。public static <T> Set<T> unmodifiableSet(Set<? extends T> s)
返されるセットは、指定されたセットが直列化可能の場合に直列化可能になります。
s
- 変更不可能なビューが返されるセット。public static <T> SortedSet<T> unmodifiableSortedSet(SortedSet<T> s)
返されたソートセットは、指定されたソートセットが直列化可能の場合は直列化可能です。
s
- 変更不可能なビューが返されるソートセット。public static <T> List<T> unmodifiableList(List<? extends T> list)
返されたリストは、指定されたリストが直列化可能の場合にだけ直列化可能になります。同様に、指定されたリストが RandomAccess
を実装する場合にだけ、返されたリストはこれを実装します。
list
- 変更不可能なビューが返されるリスト。public static <K,V> Map<K,V> unmodifiableMap(Map<? extends K,? extends V> m)
返されたマップは、指定されたマップが直列化可能の場合は直列化可能です。
m
- 変更不可能なビューが返されるマップ。public static <K,V> SortedMap<K,V> unmodifiableSortedMap(SortedMap<K,? extends V> m)
返されたソートマップは、指定されたソートマップが直列化可能の場合は直列化可能です。
m
- 変更不可能なビューが返されるソートマップ。public static <T> Collection<T> synchronizedCollection(Collection<T> c)
返されたコレクションの繰り返し処理を行う場合、ユーザーは、次に示すように手動で同期をとる必要があります。
Collection c = Collections.synchronizedCollection(myCollection); ... synchronized (c) { Iterator i = c.iterator(); // Must be in the synchronized block while (i.hasNext()) foo(i.next()); }これを行わない場合、動作は保証されません。
返されたコレクションは、hashCode オペレーションおよび equals オペレーションを基となるコレクションに渡すことはなく、Object の equals メソッドおよび hashCode メソッドに依存します。これは、基となるコレクションがセットまたはリストの場合にそれらのオペレーションの規約を守るために必要です。
返されたコレクションは、指定されたコレクションが直列化可能の場合は直列化可能です。
c
- 同期コレクションに「ラップ」されるコレクション。public static <T> Set<T> synchronizedSet(Set<T> s)
返されたセットの繰り返し処理を行う場合、ユーザーは、次に示すように手動で同期をとる必要があります。
Set s = Collections.synchronizedSet(new HashSet()); ... synchronized (s) { Iterator i = s.iterator(); // Must be in the synchronized block while (i.hasNext()) foo(i.next()); }これを行わない場合、動作は保証されません。
返されるセットは、指定されたセットが直列化可能の場合に直列化可能になります。
s
- 同期セットに「ラップ」されるセット。public static <T> SortedSet<T> synchronizedSortedSet(SortedSet<T> s)
返されたソートセット、またはその subSet、headSet、あるいは tailSet ビューの繰り返し処理を行う場合、ユーザーは、次に示すように手動で同期をとる必要があります。
SortedSet s = Collections.synchronizedSortedSet(new TreeSet()); ... synchronized (s) { Iterator i = s.iterator(); // Must be in the synchronized block while (i.hasNext()) foo(i.next()); }または
SortedSet s = Collections.synchronizedSortedSet(new TreeSet()); SortedSet s2 = s.headSet(foo); ... synchronized (s) { // Note: s, not s2!!! Iterator i = s2.iterator(); // Must be in the synchronized block while (i.hasNext()) foo(i.next()); }これを行わない場合、動作は保証されません。
返されたソートセットは、指定されたソートセットが直列化可能の場合は直列化可能です。
s
- 同期ソートセットに「ラップ」されるソートセット。public static <T> List<T> synchronizedList(List<T> list)
返されたリストの繰り返し処理を行う場合、ユーザーは、次に示すように手動で同期をとる必要があります。
List list = Collections.synchronizedList(new ArrayList()); ... synchronized (list) { Iterator i = list.iterator(); // Must be in synchronized block while (i.hasNext()) foo(i.next()); }これを行わない場合、動作は保証されません。
返されたリストは、指定されたリストが直列化可能の場合にだけ直列化可能になります。
list
- 同期リストに「ラップ」されるリスト。public static <K,V> Map<K,V> synchronizedMap(Map<K,V> m)
返されたマップのコレクションビューでの繰り返し処理を行う場合、ユーザーは、次に示すように手動で同期をとる必要があります。
Map m = Collections.synchronizedMap(new HashMap()); ... Set s = m.keySet(); // Needn't be in synchronized block ... synchronized (m) { // Synchronizing on m, not s! Iterator i = s.iterator(); // Must be in synchronized block while (i.hasNext()) foo(i.next()); }これを行わない場合、動作は保証されません。
返されたマップは、指定されたマップが直列化可能の場合は直列化可能です。
m
- 同期マップに「ラップ」されるマップ。public static <K,V> SortedMap<K,V> synchronizedSortedMap(SortedMap<K,V> m)
返されたソートマップのコレクションビュー、または subMap、headMap、tailMap ビューのコレクションビューでの繰り返し処理を行う場合、ユーザーは、次に示すように手動で同期をとる必要があります。
SortedMap m = Collections.synchronizedSortedMap(new TreeMap()); ... Set s = m.keySet(); // Needn't be in synchronized block ... synchronized (m) { // Synchronizing on m, not s! Iterator i = s.iterator(); // Must be in synchronized block while (i.hasNext()) foo(i.next()); }または
SortedMap m = Collections.synchronizedSortedMap(new TreeMap()); SortedMap m2 = m.subMap(foo, bar); ... Set s2 = m2.keySet(); // Needn't be in synchronized block ... synchronized (m) { // Synchronizing on m, not m2 or s2! Iterator i = s.iterator(); // Must be in synchronized block while (i.hasNext()) foo(i.next()); }これを行わない場合、動作は保証されません。
返されたソートマップは、指定されたソートマップが直列化可能の場合は直列化可能です。
m
- 同期ソートマップに「ラップ」されるソートマップ。public static <E> Collection<E> checkedCollection(Collection<E> c, Class<E> type)
ClassCastException
がスローされます。動的に型保証されたビューが生成される前はコレクションに不正な型の要素が含まれず、後続のコレクションへのアクセスがすべてこのビューを介して行われる場合、コレクションには不正な型の要素が含まれないことが保証されます。
言語内のジェネリックメカニズムによりコンパイル時 (静的) の型チェックが提供されますが、チェックされないキャストを使用してこのメカニズムを無効にすることはできません。通常、この種のチェックされない操作すべてでコンパイラが警告を発行するため、これは問題にはなりません。ただし、時として、静的な型チェックだけでは不十分な場合があります。たとえば、コレクションがサードパーティーのライブラリに渡されるが、ライブラリコードが不正な型の要素を挿入してコレクションを破壊してしまうことがあってはならない場合などです。
動的に型保証されたビューの別の用途は、デバッグです。プログラムが ClassCastException
で失敗し、不正な型の要素がパラメータ化されたコレクションに入れられたことを示す場合を考えましょう。残念なことに、不正な要素が挿入されるとこの例外が常に発生する可能性があるため、この例外から問題のソースに関する情報をほとんどまたはまったく得ることができません。問題が再現可能な場合は、プログラムを変更して動的な型保証されたビューでコレクションを一時的にラップすることで、ソースをすばやく判定できます。たとえば、宣言
Collection<String> c = new HashSet<String>();
は、次の宣言で一時的に置き換えることができます。
Collection<String> c = Collections.checkedCollection(
new HashSet<String>(), String.class);
プログラムを再度実行すると、不正な型の要素がコレクションに挿入された位置でプログラムが失敗するため、問題の原因をはっきりと識別できます。問題を修正したら、変更した宣言を元に戻します。
返されたコレクションは、hashCode オペレーションおよび equals オペレーションを基となるコレクションに渡すことはなく、Object
の equals
メソッドおよび hashCode
メソッドに依存します。これは、基となるコレクションがセットまたはリストの場合にそれらのオペレーションの規約を守るために必要です。
返されたコレクションは、指定されたコレクションが直列化可能の場合は直列化可能です。
null
はどの参照型の値ともみなされるため、基になるコレクションが null 要素の挿入を許可するときは必ず、返されるコレクションもこれを許可します。
c
- 動的に型保証されたビューが返されるコレクションtype
- c
が保持することを許された要素の型public static <E> Set<E> checkedSet(Set<E> s, Class<E> type)
ClassCastException
がスローされます。動的に型保証されたビューが生成される前はセットに不正な型の要素が含まれず、セットへの後続のアクセスがすべてこのビューを介して行われる場合、セットには不正な型の要素が含まれないことが保証されます。
動的に型保証されたビューの使用については、checkedCollection
メソッドのドキュメントを参照してください。
返されるセットは、指定されたセットが直列化可能の場合に直列化可能になります。
null
はどの参照型の値ともみなされるため、基になるセットが null 要素の挿入を許可するときは必ず、返されるセットもこれを許可します。
s
- 動的に型保証されたビューが返されるセットtype
- s
が保持することを許された要素の型public static <E> SortedSet<E> checkedSortedSet(SortedSet<E> s, Class<E> type)
ClassCastException
がスローされます。動的に型保証されたビューが生成される前はソートセットに不正な型の要素が含まれず、ソートセットへの後続のアクセスがすべてこのビューを介して行われる場合、ソートセットには不正な型の要素が含まれないことが保証されます。
動的に型保証されたビューの使用については、checkedCollection
メソッドのドキュメントを参照してください。
返されたソートセットは、指定されたソートセットが直列化可能の場合は直列化可能です。
null
はどの参照型の値ともみなされるため、基になるソートセットが null 要素の挿入を許可するときは必ず、返されるソートセットもこれを許可します。
s
- 動的に型保証されたビューが返されるソートセットtype
- s
が保持することを許された要素の型public static <E> List<E> checkedList(List<E> list, Class<E> type)
ClassCastException
がスローされます。動的に型保証されたビューが生成される前はリストに不正な型の要素が含まれず、リストへの後続のアクセスがすべてこのビューを介して行われる場合、リストには不正な型の要素が含まれないことが保証されます。
動的に型保証されたビューの使用については、checkedCollection
メソッドのドキュメントを参照してください。
返されたリストは、指定されたリストが直列化可能の場合にだけ直列化可能になります。
null
はどの参照型の値ともみなされるため、基になるリストが null 要素の挿入を許可するときは必ず、返されるリストもこれを許可します。
list
- 動的に型保証されたビューが返されるリストtype
- list
が保持することを許された要素の型public static <K,V> Map<K,V> checkedMap(Map<K,V> m, Class<K> keyType, Class<V> valueType)
ClassCastException
がスローされます。同様に、キーに現在関連付けられている値を変更しようとすると、変更がマップ自体を介して試みられるか、マップの entry set
ビューから取得された Map.Entry
インスタンスを介して試みられるかにかかわらず、すぐに ClassCastException
がスローされます。
動的に型保証されたビューが生成される前に、不正な型のキーまたは値がマップに含まれず、マップへの後続のアクセスがすべてビュー (またはコレクションビューの 1 つ) を介して行われる場合、マップに不正な型のキーや値が含まれないことが保証されます。
動的に型保証されたビューの使用については、checkedCollection
メソッドのドキュメントを参照してください。
返されたマップは、指定されたマップが直列化可能の場合は直列化可能です。
null
はどの参照型の値ともみなされるため、基になるマップが null のキーまたは値の挿入を許可するときは必ず、返されるマップも許可します。
m
- 動的に型保証されたビューが返されるマップkeyType
- m
が保持することを許されたキーの型valueType
- m
が保持することを許された値の型public static <K,V> SortedMap<K,V> checkedSortedMap(SortedMap<K,V> m, Class<K> keyType, Class<V> valueType)
ClassCastException
がスローされます。同様に、キーに現在関連付けられている値を変更しようとすると、変更がマップ自体を介して試みられるか、マップの entry set
ビューから取得された Map.Entry
インスタンスを介して試みられるかにかかわらず、すぐに ClassCastException
がスローされます。
動的に型保証されたビューが生成される前に、不正な型のキーまたは値がマップに含まれず、マップへの後続のアクセスがすべてビュー (またはコレクションビューの 1 つ) を介して行われる場合、マップに不正な型のキーや値が含まれないことが保証されます。
動的に型保証されたビューの使用については、checkedCollection
メソッドのドキュメントを参照してください。
返されたマップは、指定されたマップが直列化可能の場合は直列化可能です。
null
はどの参照型の値ともみなされるため、基になるマップが null のキーまたは値の挿入を許可するときは必ず、返されるマップも許可します。
m
- 動的に型保証されたビューが返されるマップkeyType
- m
が保持することを許されたキーの型valueType
- m
が保持することを許された値の型public static <T> Iterator<T> emptyIterator()
hasNext
は常に false
を返します。
next
は常に NoSuchElementException
をスローします。
remove
は常に IllegalStateException
をスローします。
複数の呼び出しから同じオブジェクトを返すために、このメソッドの実装は許可されていますが、必須ではありません。
public static <T> ListIterator<T> emptyListIterator()
hasNext
および hasPrevious
は常に false
を返します。
next
および previous
は常に NoSuchElementException
をスローします。
remove
および set
は常に IllegalStateException
をスローします。
add
は常に UnsupportedOperationException
をスローします。
nextIndex
は常に 0
を返します。
previousIndex
は常に -1
を返します。
複数の呼び出しから同じオブジェクトを返すために、このメソッドの実装は許可されていますが、必須ではありません。
public static <T> Enumeration<T> emptyEnumeration()
hasMoreElements
は常に false
を返します。
nextElement
は常に NoSuchElementException
をスローします。
複数の呼び出しから同じオブジェクトを返すために、このメソッドの実装は許可されていますが、必須ではありません。
public static final <T> Set<T> emptySet()
次に、空のセットを取得するための型保証された方法の例を示します。
Set<String> s = Collections.emptySet();実装にあたっての注意:このメソッドの実装では、呼び出しごとに個別の Set オブジェクトを作成する必要はありません。このメソッドは同様の名前が付けられたフィールドを使用した比較可能なコストがあるようなものです。(このメソッドとは異なり、フィールドは型保証しない。)
EMPTY_SET
public static final <T> List<T> emptyList()
次に、空のリストを取得するための型保証された方法の例を示します。
List<String> s = Collections.emptyList();実装にあたっての注意:このメソッドの実装では、呼び出しごとに個別の List オブジェクトを作成する必要はありません。このメソッドは同様の名前が付けられたフィールドを使用した比較可能なコストがあるようなものです。(このメソッドとは異なり、フィールドは型保証しない。)
EMPTY_LIST
public static final <K,V> Map<K,V> emptyMap()
次に、空のセットを取得するための型保証された方法の例を示します。
Map<String, Date> s = Collections.emptyMap();実装にあたっての注意:このメソッドの実装では、呼び出しごとに個別の Map オブジェクトを作成する必要はありません。このメソッドは同様の名前が付けられたフィールドを使用した比較可能なコストがあるようなものです。(このメソッドとは異なり、フィールドは型保証しない。)
EMPTY_MAP
public static <T> Set<T> singleton(T o)
o
- 返されるセットに格納される唯一のオブジェクト。public static <T> List<T> singletonList(T o)
o
- 返されるリストに格納される唯一のオブジェクト。public static <K,V> Map<K,V> singletonMap(K key, V value)
key
- 返されるマップに格納される唯一のキー。value
- 返されるマップによって key がマッピングされる値。public static <T> List<T> nCopies(int n, T o)
n
- 返されるリストの要素数。o
- 返されるリストに繰り返し現れる要素。IllegalArgumentException
- n < 0
の場合List.addAll(Collection)
, List.addAll(int, Collection)
public static <T> Comparator<T> reverseOrder()
Comparable
インタフェースを実装するオブジェクトのコレクションで自然順序付けの逆を義務付けるコンパレータを返します。自然順序付けとは、オブジェクト自身の compareTo
メソッドが示す順序のことです。これにより、Comparable
インタフェースを実装するオブジェクトのコレクション (または配列) を簡単に逆自然順序でソート (または保守) できます。たとえば、a
が文字列の配列であると仮定します。次のようになります。Arrays.sort(a, Collections.reverseOrder());逆引きの辞書編集順 (アルファベット順) で配列をソートします。
返されるコンパレータは直列化可能です。
Comparable
public static <T> Comparator<T> reverseOrder(Comparator<T> cmp)
null
の場合、このメソッドは reverseOrder()
と等価になります (つまり、Comparable インタフェースを実装するオブジェクトのコレクションに逆の自然順序を義務付けるコンパレータを返す)。
返されるコンパレータは直列化可能です (指定されたコンパレータも直列化可能であるか null
の場合)。
cmp
- 返されるコンパレータによってその順序が逆になるコンパレータ、または null
public static <T> Enumeration<T> enumeration(Collection<T> c)
c
- 列挙が返されるコレクション。Enumeration
public static <T> ArrayList<T> list(Enumeration<T> e)
e
- 返される配列リストの要素を提供する列挙Enumeration
, ArrayList
public static int frequency(Collection<?> c, Object o)
c
- o の頻度を判定するコレクションo
- 頻度を判定するオブジェクトNullPointerException
- c が null の場合public static boolean disjoint(Collection<?> c1, Collection<?> c2)
true
を返します。
Collection
の汎用規約に準拠しないコレクションに対してこのメソッドを使用する場合は、注意が必要です。実装が、一方のコレクションに対して処理を繰り返し実行し、他方のコレクション内に含まれるかどうかをテストする (または等価な計算を実行する) 場合があります。一方のコレクションが非標準の等価テストを使用する場合 (順序が等価との互換性を持たない SortedSet
や、IdentityHashMap
のキーセットのように) 、両方のコレクションで同じ非標準の等価テストを使用する必要があります。そうでない場合のこのメソッドの結果は定義されていません。
格納できる要素に制限があるコレクションを使用する場合も、注意が必要です。コレクションの実装では、不適当だと判断される要素を含む任意の操作に対して、例外をスローすることが許可されます。完全な安全性を確保するには、指定されたコレクションには、両方のコレクションで適当な要素となる要素のみを含めるようにする必要があります。
両方のパラメータ内で同じコレクションを渡すことは許容されています。この場合、コレクションが空の場合にのみ、メソッドは true
を返します。
c1
- コレクションc2
- コレクションtrue
。NullPointerException
- いずれかのコレクションが null
の場合。NullPointerException
- あるコレクションに null
要素が含まれるが、別のコレクションでは null
が適当な要素でない場合 (オプション)ClassCastException
- あるコレクションに含まれる要素の型が、別のコレクションでは不適当な場合 (オプション)@SafeVarargs public static <T> boolean addAll(Collection<? super T> c, T... elements)
要素を個別に指定する場合、このメソッドでは、次の例のように、数種類の要素を既存のコレクションに簡単に追加できます。
Collections.addAll(flavors, "Peaches 'n Plutonium", "Rocky Racoon");
c
- elements が挿入されるコレクションelements
- c に挿入される要素UnsupportedOperationException
- c が add オペレーションをサポートしない場合NullPointerException
- elements に 1 つ以上の null 値が含まれており、c が null 要素を許可しない場合、あるいは c または elements が null の場合IllegalArgumentException
- elements 内のある値のプロパティーが原因で、c に追加できない場合Collection.addAll(Collection)
public static <E> Set<E> newSetFromMap(Map<E,Boolean> map)
Map
実装に対応する Set
実装を提供します。HashMap
や TreeMap
など対応する Set
実装がすでにある Map
実装では、このメソッドを使用する必要はありません。
このメソッドによって返されるセットでのそれぞれのメソッド呼び出しによって、1 つの例外を除き、基になるマップかその keySet ビューでメソッド呼び出しが 1 つだけ発生します。addAll メソッドは、基になるマップの一連の put 呼び出しとして実装されます。
指定されたマップは、このメソッドが呼び出された時点では空でなければならず、このメソッドの終了後は直接アクセスすることはできません。これらの条件は、次のコードの抜粋に示すように、マップが空の状態で作成され、このメソッドに直接渡され、マップへの参照が保持されない場合に保証されます。
Set<Object> weakHashSet = Collections.newSetFromMap( new WeakHashMap<Object, Boolean>());
map
- 基になるマップIllegalArgumentException
- map が空でない場合public static <T> Queue<T> asLifoQueue(Deque<T> deque)
Deque
のビューを後入れ先出し (Lifo) の Queue
として返します。add メソッドは push にマップされ、remove メソッドは pop にマップされ、以下同様にマップされます。このビューは、Queue が必要なメソッドを使用したいが Lifo 順序付けが必要な場合に有効なことがあります。
このメソッドによって返されるキューでのそれぞれのメソッド呼び出しによって、1 つの例外を除き、基になる両端キューでメソッド呼び出しが 1 つだけ発生します。addAll
メソッドは、基になる両端キューの一連の addFirst
呼び出しとして実装されます。
deque
- 両端キュー バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.