Collections Framework の拡張機能
このページでは、Java SE 6 の Collections Framework の拡張機能について説明します。
このリリースでは、変更した API の数が 5.0 よりも少なく、仕様の正確度と明確性により重点が置かれています。このため、旧リリースのプログラムを作成する場合でも、Java SE 6 の仕様を参照することをお勧めします。
API 変更のプライマリテーマはコレクションの双方向アクセスの改善でした。
次の新しいコレクションインタフェースが提供されます。
- Deque - 二重終端キュー。両端での要素の挿入と削除をサポートします。Queue インタフェースを拡張する。
- BlockingDeque - 要素を取り出すときに、deque が空でなくなるまで待機したり、要素を格納するときに deque でスペースが利用できるようになるまで待機する操作を行う Deque。Deque および BlockingQueue インタフェースを拡張する (このインタフェースは、java.util.concurrent の一部になる)。
- NavigableSet - 指定の検索ターゲットにもっとも近い一致内容を報告するナビゲーションメソッドで拡張された SortedSet。昇順または降順の順序で、NavigableSet がアクセスしたり、トラバースしたりできる。このインタフェースは SortedSet インタフェースの代わりです。
- NavigableMap - 指定の検索ターゲットにもっとも近い一致内容を返すナビゲーションメソッドで拡張された SortedMap。昇順または降順のキー順序で、NavigableMap がアクセスしたり、トラバースしたりできます。このインタフェースは SortedMap インタフェースの代わりです。
- ConcurrentNavigableMap - NavigableMap でもある ConcurrentMap (このインタフェースは、java.util.concurrent の一部になる)。
次の固定実装クラスが追加されました。
次の既存のクラスが、新しいインタフェースを実装するために改良されました。
- LinkedList - Deque インタフェースを実装するために改良。
- TreeSet - NavigableSet インタフェースを実装するために改良。
- TreeMap - NavigableMap インタフェースを実装するために改良。
新しい 2 つのメソッドが Collections ユーティリティークラスに追加されました。
- newSetFromMap(Map) - 汎用の Set 実装を汎用の Map 実装から作成します。
IdentityHashSet クラスは存在しませんが、代わりに次のように使用します
Set<Object> identityHashSet=
Collections.newSetFromMap(
new IdentityHashMap<Object, Boolean>());
- asLifoQueue(Deque) - LIFO (Last in first out) キューとして、Deque のビューを返します。
今回、
Arrays ユーティリティークラスには、
copyOf と
copyOfRange メソッドが追加されました。これらは、すべての型の配列に対して、部分配列のサイズ変更、切り詰め、コピーを効果的に実行できます。
変更前:
int[] newArray = new int[newLength];
System.arraycopy(oldArray, 0, newArray, 0, oldArray.length);
変更後:
int[] newArray = Arrays.copyOf(a, newLength);