Collectionsの目的別まとめ

便利だけど見落としがちなjava.util.Collectionsの全メソッドを目的別にまとめる。

執筆時バージョン
Java

Java SE 8

CollectionsはCollectionフレームワークに関連したユーティリティメソッドを集めたクラス。これらのメソッドを目的別にまとめる。

Comparator

Java8以降であればComparator#reversed()などを利用した方がよい。

目的 メソッド

自然順序づけの逆順コンパレータ

reverseOrder()

指定されたcompartorの逆順コンパレータ

reverseOrder(Comparator<T> cmp)

List専用

検索

binarySearch()は昇順にしておかないと結果が保証されないので注意。

目的 メソッド

二分探索

binarySearch(List<? extends Comparable<? super T» list, T key)
binarySearch(List<? extends T> list, T key, Comparator<? super T> c)

リストが最初に出現した
開始位置を返す

indexOfSubList(List<?> source, List<?> target)

リストが最後に出現した
開始位置を返す

lastIndexOfSubList(List<?> source, List<?> target)

操作

目的 メソッド

リストのコピーを作る

copy(List<? super T> dest, List<? extends T> src)

リスト要素をすべて置き換える

fill(List<? super T> list, T obj)

リストを並び替える

sort(List<T> list)
sort(List<T> list, Comparator<? super T> c)

リスト内に出現する指定された値を
すべてほかの値に置き換える

replaceAll(List<T> list, T oldVal, T newVal)

リストを逆順にする

reverse(List<?> list)

リストを回転する

rotate(List<?> list, int distance)

リストをシャッフルする

shuffle(List<?> list)
shuffle(List<?> list, Random rnd)

リスト要素のスワップをする

swap(List<?> list, int i, int j)

ファクトリ

空のコレクションの生成

staticフィールドにも空コレクションが存在するが、メソッドだとジェネリクスの警告が出ないのでこちらを使う。

目的 メソッド

空のコレクションを生成

emptyList()
emptySet()
emptySortedSet()
emptyNavigableSet()
emptyMap()
emptySortedMap()
emptyNavigableMap()
emptyIterator()
emptyListIterator()
emptyEnumeration()

要素が1つのコレクションの生成

目的 メソッド

要素が1つのList

singletonList(T o)

要素が1つのSet

singleton(T o)

要素が1つのMap

singletonMap(K key, V value)

特殊な変換(生成)

目的 メソッド

Collection→Enumeration

enumeration(Collection<T> c)

Enumeration→List

list(Enumeration<T> e)

マップに連動するセット

newSetFromMap(Map<E,Boolean> map)

n個のコピーで構成される不変のリスト

nCopies(int n, T o)

Deque→Queue

asLifoQueue(Deque<T> deque)

デコレーション

変更不可能なコレクション

要素を変更するようなメソッドを呼び出すとUnsupportedOperationExceptionがスローされるようになる。一切要素を変更してほしくない場合などに利用。

目的 メソッド

変更不可能なコレクションに
デコレート

unmodifiableCollection(Collection<? extends T> c)
unmodifiableList(List<? extends T> list)
unmodifiableSet(Set<? extends T> s)
unmodifiableSortedSet(SortedSet<T> s)
unmodifiableNavigableSet(NavigableSet<T> s)
unmodifiableMap(Map<? extends K,? extends V> m)
unmodifiableSortedMap(SortedMap<K,? extends V> m)
unmodifiableNavigableMap(NavigableMap<K,? extends V> m)

型チェックされるコレクション

要素を変更するようなメソッド(例えばadd())では必ず型チェックが行われるようになる。通常ジェネリックスによりコンパイルエラーになるが無理矢理挿入することも可能。よって、絶対に違う型の要素を入れてほしくない場合や検査のために利用。

目的 メソッド

型チェックされる
コレクションに
デコレート

checkedCollection(Collection<E> c, Class<E> type)
checkedList(List<E> list, Class<E> type)
checkedSet(Set<E> s, Class<E> type)
checkedSortedSet(SortedSet<E> s, Class<E> type)
checkedNavigableSet(NavigableSet<E> s, Class<E> type)
checkedMap(Map<K,V> m, Class<K> keyType, Class<V> valueType)
checkedSortedMap(SortedMap<K,V> m, Class<K> keyType, Class<V> valueType)
checkedNavigableMap(NavigableMap<K,V> m, Class<K> keyType, Class<V> valueType)
checkedQueue(Queue<E> queue, Class<E> type)

同期化コレクション

各メソッドでsynchornizedを利用した同期が行われるようになる。基本的には並列コレクションを使った方がよい。

目的 メソッド

同期化コレクションに
デコレート

synchronizedCollection(Collection<T> c)
synchronizedList(List<T> list)
synchronizedSet(Set<T> s)
synchronizedSortedSet(SortedSet<T> s)
synchronizedNavigableSet(NavigableSet<T> s)
synchronizedMap(Map<K,V> m)
synchronizedSortedMap(SortedMap<K,V> m)
synchronizedNavigableMap(NavigableMap<K,V> m)

Appendix B: 改訂履歴

  • v1.0, 2015-04-10: 初稿