Collections Frameworkの概要
Collections Frameworkは、次の要素で構成されます。- コレクション・インタフェース- コレクションを操作するプライマリの手段。
- Collection - オブジェクトのグループ。 コレクションの順序付けおよび重複する要素を含んでいるかどうかについては何も考慮しない。
- Set - よく使用される、セットの抽象化。 要素の重複は許可されない。 順序付けはされていても、いなくてもよい。
Collection
インタフェースを拡張します。 - List - 順序付けられたコレクションです。シーケンスとも呼ばれます。 一般に重複は許可されます。 位置によるアクセスを許可します。
Collection
インタフェースを拡張します。 - Queue - 処理を行う前に要素を保持するために設計されたコレクション。 基本的な
Collection
操作の他に、キューによって挿入、抽出および検査操作が追加されます。 - Deque - 二重終端キュー。両端での要素の挿入と削除をサポートします。
Queue
インタフェースを拡張します。 - Map - キーから値へのマッピング。 各キーを1つの値へマッピングできる。
- SortedSet - 「自然順序付け」 (
Comparable
インタフェースを参照)またはSortedSet
インスタンスの作成時に指定されたComparator
オブジェクトで、要素が自動的にソートされるセット。Set
インタフェースを拡張します。 - SortedMap - マッピングがキーで自動的にソートされるマップ。キーの「自然順序付け」を使用するか、
SortedMap
インスタンスの作成時に指定されたコンパレータによってソートされます。Map
インタフェースを拡張します。 - NavigableSet - 特定の検索ターゲットに最も近い一致を報告するナビゲーション・メソッドで拡張された
SortedSet
。 昇順または降順の順序で、NavigableSet
がアクセスしたり、トラバースしたりできる。 - NavigableMap - 特定の検索ターゲットに最も近い一致を返すナビゲーション・メソッドで拡張された
SortedMap
。NavigableMap
は、昇順または降順のキー順序でアクセスおよびトラバースできます。 - BlockingQueue - 要素の取得時にキューが空でなくなるのを待機し、要素の格納時にキューで領域が使用可能になるのを待機する操作を含む
Queue
。 (このインタフェースは、java.util.concurrent
パッケージの一部です。) - TransferQueue - プロデューサがコンシューマが要素の受信を待機できる
BlockingQueue
。 (このインタフェースは、java.util.concurrent
パッケージの一部です。) - BlockingDeque - 要素の取得時にデキューが空でなくなるのを待機し、要素の格納時にデキューで領域が使用可能になるまで待機する操作を含む
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)を参照)。
- HashSet -
- ラッパー実装 - ほかの実装と併用して機能を拡張するための実装。 staticファクトリ・メソッドを介して単独でアクセスされる。
- Collections.unmodifiableインタフェース - ユーザーが
UnsupportedOperationException
を変更しようとした場合にUnsupportedOperationException
をスローする、指定されたコレクションの変更不可のビューを返します。 - Collections.synchronizedInterface - 指定された(一般には同期をとらない)コレクションに基づく、同期化されたコレクションを返す。 基となるコレクションへのアクセスがすべて、返されたコレクションを通して行われるかぎり、スレッドの安全性は保証される。
- Collections.checkedインタフェース - 指定されたコレクションの動的な型セーフ・ビューを返します。クライアントが間違ったタイプの要素を追加しようとすると、
ClassCastException
がスローされます。 言語にあるジェネリック・メカニズムによりコンパイル時に静的な型チェックが行われるが、このメカニズムをバイパスすることも可能。 動的型保証ビューはこの可能性を解決する。
- Collections.unmodifiableインタフェース - ユーザーが
- アダプタ実装 - コレクション・インタフェース間で適応させるための実装。
- newSetFromMap(Map) - 汎用の
Map
実装から汎用的なSet
実装を作成します。 - asLifoQueue(Deque) -
Deque
のビューをLast In First Out (LIFO)Queue
として返します。
- newSetFromMap(Map) - 汎用の
- 簡易実装 - コレクション・インタフェースの高性能な「ミニ実装」。
- Arrays.asList - 配列をリストとして表示可能にする。
- emptySet、emptyList、およびemptyMap - 不変な空のセット、リスト、またはマップを返す。
- singleton、singletonList、およびsingletonMap - 指定されたオブジェクト(またはキー値のマッピング)だけを含む、不変な「単独」セット、リスト、またはマップを返す。
- nCopies - 指定されたオブジェクトのn個のコピーからなる不変なリストを返す。
- レガシー実装 - 以前からあるコレクション・クラスが改良されて、コレクション・インタフェースを実装するようになった。
- 特殊目的の実装
- WeakHashMap - 「弱い参照」のみをキーに格納する
Map
インタフェースの実装。 弱い参照のみを格納すると、キーがWeakHashMap
の外部で参照されなくなった場合に、キーと値のペアをガベージ・コレクションできます。 このクラスを利用すると、弱参照をもっとも簡単に利用することができる。 キーがどのスレッドからもアクセスできなくなると、エントリの有用性がなくなるレジストリ的なデータ構造を実装する場合に役立つ。 - IdentityHashMap - ハッシュ表に基づくアイデンティティ・ベースの
Map
実装。 直列化やディープ・コピーなどのように、トポロジを維持しながらオブジェクト・グラフを変形する場合に、このクラスは便利です。 このような変形を行うには、どのオブジェクトが表示済かを追跡する識別情報ベースの「ノード表」を保持する必要があります。 識別情報ベースのマップを使用して、動的なデバッガや同様のシステムでオブジェクトとメタ情報のマッピングを保守することもできます。 また、識別情報ベースのマップはequalsメソッドを意図的に歪ませることによって発生する「不正行為」を防ぐ場合に有用です。 (IdentityHashMap
は、キーに対してequalsメソッドを呼び出しません。) この実装のもう1つの利点は、高速だということです。 - CopyOnWriteArrayList - コピー・オン・ライト配列に支えられた
List
実装。 すべての可変操作(add
、set
、remove
など)は、配列の新しいコピーを作成することによって実装されます。 反復中であっても同期は不要で、イテレータはConcurrentModificationException
をスローしないことが保証されます。 この実装はイベント・ハンドラ・リストの維持に最適(変更がまれで、トラバーサルは頻繁に発生し、時間がかかる可能性があるため)。 - CopyOnWriteArraySet - コピー・オン・ライト配列に支えられた
Set
実装。 この実装は、CopyOnWriteArrayList
と似ています。 ほとんどのSet
実装とは異なり、add
、remove
、およびcontains
メソッドには、セットのサイズに比例した時間が必要です。 この実装は、重複を回避する必要があるイベント・ハンドラ・リストの維持に最適。 - EnumSet - ビット・ベクトルに支えられた高パフォーマンスの
Set
実装。 各EnumSet
インスタンスのすべての要素は、単一の列挙型の要素である必要があります。 - EnumMap - 配列に支えられた高パフォーマンスの
Map
実装。 各EnumMap
インスタンスのすべてのキーは、単一の列挙型の要素である必要があります。
- WeakHashMap - 「弱い参照」のみをキーに格納する
- 「同時実装」 - これらの実装は、
java.util.concurrent
の一部です。- ConcurrentLinkedQueue - リンク・ノードに基づくアンバウンド形式のFIFO (先入れ先出し)キュー。
- LinkedBlockingQueue - リンク・ノードに基づくオプションのバウンド形式のFIFOブロッキング・キュー。
- ArrayBlockingQueue - 配列に基づくバウンド形式のFIFOブロッキング・キュー。
- PriorityBlockingQueue - 優先順位ヒープを基とする、アンバウンド形式のブロッキング優先度キュー。
- DelayQueue - 優先順位ヒープを基とする、時間ベースのスケジュール・キュー。
- SynchronousQueue -
BlockingQueue
インタフェースを使用する単純なレンデブ・メカニズム。 - LinkedBlockingDeque - リンクされたノードでサポートされ、オプションで結合されたFIFO BlockingDeque。
- LinkedTransferQueue - リンクされたノードに支えられたバインドされていない
TransferQueue
。 - ConcurrentHashMap - ハッシュ表に基づく高パフォーマンスの同時
ConcurrentMap
実装。 この実装は取得を実行するときにブロックせず、クライアントが更新する並行処理のレベルの選択を許可する。 これは、Hashtable
のドロップ・イン置換用です。ConcurrentMap
の実装に加えて、Hashtable
のすべてのレガシー・メソッドもサポートされます。 - ConcurrentSkipListSet -
NavigableSet
インタフェースのリスト実装をスキップします。 - ConcurrentSkipListMap -
ConcurrentNavigableMap
インタフェースのリスト実装をスキップします。
- 抽象実装 - カスタム実装を容易にする、コレクション・インタフェースの骨格実装。
- AbstractCollection - セットでもリスト("ベファーナ"やマルチ・セットなど)でもないスケルトン
Collection
実装。 - AbstractSet - スケルトン
Set
実装。 - AbstractList - ランダム・アクセス・データ・ストア(配列など)にバックアップされたスケルトン
List
実装。 - AbstractSequentialList - 順次アクセス・データ・ストア(リンクされたリストなど)に支えられたスケルトン
List
実装。 - AbstractQueue - スケルトン
Queue
実装。 - AbstractMap - スケルトン
Map
実装。
- AbstractCollection - セットでもリスト("ベファーナ"やマルチ・セットなど)でもないスケルトン
- アルゴリズム - この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
インタフェースの機能に加え、双方向反復、要素の置換、要素の挿入および索引の取得がサポートされています。
- Iterator -
- 順序付け
- Comparable - これを実装するクラスに対し、自然順序付けの機能を提供する。 自然順序付けは、リストのソート、またソートされたセットやマップ内の順序の維持に使用できる。 多くのクラスが、このインタフェースを実装するために改良された。
- Comparator - 順序付けの関連を表し、リストのソート、またソートされたセットやマップ内の順序の維持に使用できる。
Comparable
インタフェースを実装しないタイプの自然順序または順序オブジェクトをオーバーライドできます。
- 実行時例外
- UnsupportedOperationException - サポートしていないオプションの操作の呼出し時に、コレクションによりスローされる。
- ConcurrentModificationException - 反復の進行中に、基になるコレクションに対して予期しない変更が行われた場合、イテレータおよびリスト・イテレータによりスローされる。 基になるリストに予期しない変更が行われた場合も、リストのサブリスト・ビューによりスローされる。
- パフォーマンス
- RandomAccess -
List
実装を可能にするマーカー・インタフェースは、高速(一般的に一定時間)ランダム・アクセスをサポートしていることを示します。 これによりジェネリック・アルゴリズムがランダム・アクセス・リストまたは順次アクセス・リストのいずれかに適用されるとき、その動作を変更してパフォーマンスを向上することができる。
- RandomAccess -
- イテレータ - Enumerationインタフェースに似ているが、より強力で、メソッド名が改良されている。
- 配列ユーティリティ
- Arrays - ソート、検索、比較、ハッシュ、コピー、サイズ変更、
String
への変換、プリミティブおよびオブジェクトの配列の塗りつぶしを行う静的メソッドが含まれています。
- Arrays - ソート、検索、比較、ハッシュ、コピー、サイズ変更、
Copyright © 1998, 2017, Oracle and/or its affiliates. 500 Oracle Parkway
Redwood Shores, CA 94065 USA. All rights reserved.