Collections Framework の拡張機能
このページでは、JDK バージョン 5 の Collections Framework の拡張機能について説明します。
次の 3 つの新しい言語機能が Collections Framework を飛躍的に拡張します。
- ジェネリクス - コンパイル時の型保証が Collections Framework に追加され、コレクションから要素を読み込むときにキャストが不要。
- 拡張された for ループ - コレクション上で対話する場合に、明示的なイテレータが不要。
- オートボクシング/アンボクシング - コレクションに挿入する場合に、プリミティブクラス (int など) をラッパークラス (Integer など) に自動的に変換し、コレクションから読み取る場合にラッパークラスのインスタンスをプリミティブクラスに変換する。
3 つの新しいコレクションインタフェースが提供されます。
- Queue - 処理を行う前に要素を保持するために設計されたコレクション。基本的な Collection オペレーションだけでなく、キューは追加の挿入、抽出、および検査オペレーションを提供する。
- BlockingQueue - 要素を取り出すときに、キューを空にしないために待機するよう Queue を拡張する。また、要素を格納するときにキューで利用可能になる領域を待機する(このインタフェースは、新しい java.util.concurrent パッケージの一部になる)。
- ConcurrentMap - 基本メソッド、putIfAbsent、remove、および replace を使用する、拡張 Map (このインタフェースは、java.util.concurrent の一部になる)。
2 つの新しい具象 Queue 実装が提供されます。1 つの既存の List 実装が Queue を実装するために改良され、1 つの抽象 Queue 実装が提供されます。
5 つの新しい BlockingQueue 実装が提供され、そのすべては java.util.concurrent の一部です。
1 つの ConcurrentMap 実装が提供されます。
- ConcurrentHashMap - ハッシュテーブルに基づく、高度に並列化された高性能な ConcurrentMap 実装。この実装は取得を実行するときにブロックせず、クライアントが更新する並行処理のレベルの選択を許可する。これは、Hashtable に対するドロップイン式の置き換えとして想定された。ConcurrentMap を実装することに加えて、Hashtable に固有のすべての「レガシー」メソッドをサポートする。
特殊目的の List および Set 実装は、読み込み操作が書き込み操作よりもはるかに多く、反復が同期できない、またはするべきではない場合に使用します。
- CopyOnWriteArrayList - 配列に基づく List 実装。すべての変更オペレーション (add、set、remove など) は、配列の新しいコピーの作成により実装される。反復中でも同期は不要であり、イテレータは ConcurrentModificationException をスローしないことが保証される。この実装はイベントハンドラリストの維持に最適 (変更がまれで、トラバーサルは頻繁に発生し、時間がかかる可能性があるため)。
- CopyOnWriteArraySet - copy-on-write 配列を基とする Set 実装。この実装は CopyOnWriteArrayList と本質的に同様。ほとんどの Set 実装と異なり、add、remove、および contains メソッドでは、メソッドはセットのサイズに比例する時間が必要。この実装は、重複を回避する必要があるイベントハンドラリストの維持に最適。
特殊目的の Set および Map 実装は、列挙型と一緒に使用します。
- EnumSet - bit-vector を基とする高性能の Set 実装。各 EnumSet インスタンスのすべての要素は、単一の列挙型の要素でなければならない。
- EnumMap - 配列を基とする高性能の Map 実装。各 EnumMap インスタンスのすべてのキーは、単一の列挙型の要素でなければならない。
新しいラッパー実装のファミリが提供され、主にジェネリックコレクションとともに使用されます。
- Collections.checkedInterface - 指定されたコレクションの動的型保証ビューを返し、クライアントが間違った型の要素を追加しようとした場合 ClassCastException をスローする。言語にあるジェネリックメカニズムによりコンパイル時に静的な型チェックが行われるが、このメカニズムを無効化することも可能。動的型保証ビューはこの可能性を完全に解決する。
3 つの新しいジェネリックアルゴリズムと 1 つのコンパレータコンバータが Collections ユーティリティークラスに追加されました。
Arrays ユーティリティークラスは、すべての型の配列に対する、コンテンツベースの hashCode および toString メソッドに装備されました。これらのメソッドは既存の equals メソッドを補完します。入れ子の (多次元な) 配列の操作を行うために、3 つのメソッドのバージョンが提供されます。それらは deepEquals、deepHashCode、および deepToString です。任意の配列の内容を容易に出力できます。「平坦な」配列を出力するコードを次に示します。
System.out.println(Arrays.toString(a));
入れ子の (多次元な) 配列を出力するコードを次に示します。
System.out.println(Arrays.deepToString(a));
Boolean は、Comparable を実装するために改良されました。