Collections Framework の概要
Collections Framework は、次の要素で構成されます。
- コレクションインタフェース- コレクションを操作するプライマリの手段。
- Collection - オブジェクトのグループ。コレクションの順序付けおよび重複する要素を含んでいるかどうかについては何も考慮しない。
- Set - よく使用される、セットの抽象化。要素の重複は許可されない。順序付けはされていても、いなくてもよい。Collection インタフェースを拡張する。
- List - 順序付けされたコレクション。シーケンスとも呼ばれる。一般に重複は許可される。位置によるアクセスを許可する。Collection インタフェースを拡張する。
- Queue - 処理を行う前に要素を保持するために設計されたコレクション。基本的な Collection オペレーションだけでなく、キューは追加の挿入、抽出、および検査オペレーションを提供する。
- Deque - 二重終端キュー。両端での要素の挿入と削除をサポートする。Queue インタフェースを拡張する。
- Map - キーから値へのマッピング。各キーを 1 つの値へマッピングできる。
- SortedSet - 自然順序 (Comparable インタフェースを参照) によって、または SortedSet のインスタンスの生成時に提供される Comparator オブジェクトによって、自動的にソートされる要素のセット。Set インタフェースを拡張する。
- SortedMap - マッピングがキーにより自動的にソートされるマップ。ソートは、キーの自然順序、または SortedMap のインスタンスの生成時に提供される Comparator を使用して行われる。Map インタフェースを拡張する。
- NavigableSet - 指定の検索ターゲットにもっとも近い一致内容を報告するナビゲーションメソッドで拡張された SortedSet。昇順または降順の順序で、NavigableSet がアクセスしたり、トラバースしたりできる。
- NavigableMap - 指定の検索ターゲットにもっとも近い一致内容を返すナビゲーションメソッドで拡張された SortedMap。昇順または降順のキー順序で、NavigableMap がアクセスしたり、トラバースしたりできる。
- BlockingQueue - 要素を取り出すときに、キューが空にならないために待機したり、要素を格納するときにキューで利用可能になる領域を待機したりする操作で使用する Queue (このインタフェースは、java.util.concurrent パッケージの一部)。
- TransferQueue - コンシューマが要素を受け取るまでプロデューサが待機できる BlockingQueue (このインタフェースは、java.util.concurrent パッケージの一部)。
- BlockingDeque - 要素を取り出すときに、deque が空でなくなるまで待機したり、要素を格納するときに deque でスペースが利用できるようになるまで待機したりする操作を行う Deque。Deque および BlockingQueue インタフェースを拡張する (このインタフェースは、java.util.concurrent パッケージの一部)。
- ConcurrentMap - 基本メソッド、putIfAbsent、remove、および replace を使用する Map (このインタフェースは、java.util.concurrent パッケージの一部)。
- ConcurrentNavigableMap - NavigableMap でもある ConcurrentMap。
- 汎用の実装 - コレクションインタフェースのプライマリ実装。
- HashSet - Set インタフェースのハッシュテーブル実装。Set インタフェースのもっとも用途の広い実装。
- TreeSet - NavigableSet インタフェースの赤 - 黒ツリー実装。
- LinkedHashSet - Set インタフェースのハッシュテーブルとリンクリスト実装。HashSet と同等の実行速度を持つ、挿入順 Set 実装。
- ArrayList - List インタフェースのサイズ変更可能な配列実装 (同期をとらない Vector)。List インタフェースのもっとも用途の広い実装。
- ArrayDeque - Deque インタフェースのサイズ変更が可能な効率的配列の実装。
- LinkedList - List インタフェースの、ダブルリンクリスト実装。要素がリスト内で頻繁に挿入あるいは削除される場合には、ArrayList 実装よりも高いパフォーマンスを発揮する。また、Deque インタフェースを実装する。Queue インタフェースを介してアクセスされた場合、LinkedList は FIFO キューとして動作する。
- PriorityQueue - アンバウンド形式の優先度キューのヒープ実装。
- HashMap - Map インタフェースのハッシュテーブル実装 (null キーおよび値をサポートする、同期をとらない Hashtable)。Map インタフェースのもっとも用途の広い実装。
- TreeMap - NavigableMap インタフェースの赤 - 黒ツリー実装。
- LinkedHashMap - Map インタフェースのハッシュテーブルとリンクリスト実装。HashMap と同等の実行速度を持つ、挿入順 Map 実装。キャッシュを構築する場合にも役立つ (removeEldestEntry(Map.Entry) を参照)。
- ラッパー実装 - ほかの実装と併用して機能を拡張するための実装。static ファクトリメソッドを介して単独でアクセスされる。
- アダプタ実装 - コレクションインタフェース間で適応させるための実装。
- 簡易実装 - コレクションインタフェースの高性能な「ミニ実装」。
- レガシー実装 - 以前からあるコレクションクラスが改良されて、コレクションインタフェースを実装するようになった。
- Vector - 「レガシーメソッド」を持つ List インタフェースの、同期化され、サイズ変更可能な配列実装。
- Hashtable - null のキーまたは値が許可されない Map インタフェースとレガシーメソッドを持つ同期化されたハッシュテーブル実装。
- 特殊目的の実装
- WeakHashMap - キーへの弱参照だけを格納する Map インタフェースの実装。弱参照だけを格納することにより、キーが WeakHashMap の外部から参照されなくなると、キー値のペアをガベージコレクトすることができる。このクラスを利用すると、弱参照をもっとも簡単に利用することができる。キーがどのスレッドからもアクセスできなくなると、エントリの有用性がなくなるレジストリ的なデータ構造を実装する場合に役立つ。
- IdentityHashMap - 識別情報ベースの Map 実装であり、ハッシュテーブルに基づく。直列化やディープコピーなどのように、トポロジを維持しながらオブジェクトグラフを変形する場合に、このクラスは便利である。このような変形を行うには、どのオブジェクトが表示済みかを追跡する識別情報ベースの「ノードテーブル」を保守する必要がある。同一性ベースのマップを使って、動的なデバッガや同様のシステムでオブジェクトとメタ情報のマッピングを保守することもできる。また、同一性ベースのマップは equals メソッドを意図的に歪ませることによって発生する「不正行為」を防ぐ場合に有用 (IdentityHashMap がキーに対して equals メソッドを呼び出すことはない)。この実装のもう 1 つの利点は、高速だということである。
- CopyOnWriteArrayList - copy-on-write 配列を基とする List 実装。すべての変更オペレーション (add、set、remove など) は、配列の新しいコピーの作成により実装される。反復中でも同期は不要であり、イテレータは ConcurrentModificationException をスローしないことが保証される。この実装はイベントハンドラリストの維持に最適 (変更がまれで、トラバーサルは頻繁に発生し、時間がかかる可能性があるため)。
- CopyOnWriteArraySet - copy-on-write 配列を基とする Set 実装。この実装は CopyOnWriteArrayList と同様。ほとんどの Set 実装と異なり、add、remove、および contains メソッドでは、メソッドはセットのサイズに比例する時間が必要。この実装は、重複を回避する必要があるイベントハンドラリストの維持に最適。
- EnumSet - bit-vector を基とする高性能の Set 実装。各 EnumSet インスタンスのすべての要素は、単一の列挙型の要素でなければならない。
- EnumMap - 配列を基とする高性能の Map 実装。各 EnumMap インスタンスのすべてのキーは、単一の列挙型の要素でなければならない。
- 並列実装 - これらの実装は java.util.concurrent の一部である。
- 抽象実装 - カスタム実装を容易にする、コレクションインタフェースの骨格実装。
- アルゴリズム - この Collections クラスには、次の便利な static メソッドが含まれている。
- sort(List) - マージソートアルゴリズムを使ってリストをソートする。このアルゴリズムは、高品質なクイックソートと同程度の性能を持つ。クイックソートより優れている点として、O(n*log n) を保証するパフォーマンスと安定性がある。安定したソートは、等価な要素の並べ替えを行わない。
- binarySearch(List, Object) - バイナリサーチアルゴリズムを使ってソートされたリスト内の要素を検索する。
- reverse(List) - リスト内の要素の順序を逆転する。
- shuffle(List) - リスト内の要素をランダムに並べ替える。
- fill(List, Object) - リストのすべての要素を指定の値で上書きする。
- copy(List dest, List src) - 元のリストを宛先のリストにコピーする。
- min(Collection) - コレクション内の最小要素を返す。
- max(Collection) - コレクション内の最大要素を返す。
- rotate(List list, int distance) - リストにあるすべての要素を、指定した距離だけ回転させる。
- replaceAll(List list, Object oldVal, Object newVal) - 指定した値をすべて別の値に置き換える。
- indexOfSubList(List source, List target) - target と等しい source の最初のサブリストのインデックスを返す。
- lastIndexOfSubList(List source, List target) - target と等しい source の最後のサブリストのインデックスを返す。
- swap(List, int, int) - 指定したリスト内の指定した位置にある要素をスワップする。
- frequency(Collection, Object) - あるコネクションにおいて指定した要素が発生した回数を計算する。
- disjoint(Collection, Collection) - 2 つのコレクションが互いに無関係である、つまり一般的な要素を含まないかどうかを判定する。
- addAll(Collection<? super T>, T...)- 指定された配列内のすべての要素を指定されたコレクションに追加する。
- インフラストラクチャー
- イテレータ - Enumeration インタフェースに似ているが、より強力で、メソッド名が改良されている。
- Iterator - Enumeration インタフェースの機能に加えて、たくみに定義された有用なセマンティクスによって、ユーザーが、基になるコレクションから要素を削除できるようになる。
- ListIterator - リストに対して使用するイテレータ。Iterator インタフェースの機能に加えて、双方向の繰り返し、要素の置換、要素の挿入およびインデックスの取得をサポートする。
- 順序付け
- Comparable - これを実装するクラスに対し、自然順序付けの機能を提供する。自然順序付けは、リストのソート、またソートされたセットやマップ内の順序の維持に使用できる。多くのクラスが、このインタフェースを実装するために改良された。
- Comparator - 順序付けの関連を表し、リストのソート、またソートされたセットやマップ内の順序の維持に使用できる。ある型の自然順序付けをオーバーライドしたり、Comparable インタフェースを実装していない型のオブジェクトの順序付けを行うことができる。
- 実行時例外
- パフォーマンス
- RandomAccess - List の実装が高速ランダムアクセス (通常は一定時間) をサポートしていることを示すためのマーカインタフェース。これによりジェネリックアルゴリズムがランダムアクセスリストまたは順次アクセスリストのいずれかに適用されるとき、その動作を変更してパフォーマンスを向上することができる。
- 配列ユーティリティー
- Arrays - プリミティブ配列およびオブジェクト配列に対して、ソート、検索、比較、ハッシュ、コピー、サイズ変更、String への変換、および埋め込みを行う static メソッドを含む。