|
Collections Framework の機能拡張
|
このページでは、JDK バージョン 5 の collections framework に対する拡張について説明します。
次の 3 つの新しい言語機能が collections framework を飛躍的に拡張します。
- 汎用性 - コンパイル時の型保証が collections framework に追加され、コレクションから要素を読み込むときにキャストが不要
- ループに対する拡張 - コレクション上で対話する場合に、明示的な反復子が不要
- オートボクシング/アンボクシング - コレクションに挿入する場合に、プリミティブクラス (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 - ビットベクトルに基づく高性能の 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 を実装するために改良されました。