このページでは、Java SE 1.4のCollections Frameworkの拡張機能について説明します。
- Collectionsユーティリティ・クラスに、新しいメソッドが追加されました。
- rotate(List list, int distance) - リストにあるすべての要素を、指定した距離だけ回転させる。 この操作は、GUIの計算では一般的です。サブリストにこの操作を適用すると、表の1つまたは複数の列移動を効果的に行うことができます。 この操作は、数学や科学の計算でも広く使用されています。
- replaceAll(List list, Object oldVal, Object newVal) - 指定した値をすべて別の値に置き換える。 これは本来、簡易メソッドです。 プログラムは難しくありませんが、非常に幅広く必要とされています。
- indexOfSubList(List source, List target) - targetと等しいsourceの最初のサブリストのインデックスを返します。 一般に、テキスト処理を含む多くの領域で使用されます。
- lastIndexOfSubList(List source, List target) - targetと等しいsourceの最後のサブリストのインデックスを返します。 一般に、テキスト処理を含む多くの領域で使用されます。
- swap(List list, int i, int j) - 指定したリスト内の指定した位置にある要素をスワップします。 この実装はネイティブな実装よりも高速ですが、本来は簡易メソッドです。
- list(Enumeration e) - 指定した列挙によって返された要素を格納するArrayListを返します。 この簡易メソッドによって、列挙を返す従来のAPIと、コレクションを必要とする新しいAPIとの相互運用が可能になります。
- 新しいRandomAccessインタフェースは、Listの実装が高速ランダム・アクセス(通常は一定時間)をサポートしていることを示すためのマーカー・インタフェースです。 これによりジェネリック・アルゴリズムがランダム・アクセス・リストまたは順次アクセス・リストのいずれかに適用されるとき、その動作を変更してパフォーマンスを向上することができます。
- 新しいLinkedHashMapクラスは、挿入順に実行されるMap実装であり、HashMapと同じほど高速で実行されます。 内部的には、挿入順に実行される二重にリンクされたリストがあるハッシュ表を使用します。 これに対応するSetの実装もあり、LinkedHashSetと呼ばれています。
- 新しいIdentityHashMapクラスは、識別情報ベースのMap実装であり、ハッシュ表に基づいています。 直列化やディープ・コピーなどのように、トポロジを維持しながらオブジェクト・グラフを変形する場合に、このクラスは便利です。 このような変形を行うには、どのオブジェクトが表示済かを追跡する識別情報ベースの「ノード表」を保持する必要があります。 識別情報ベースのマップを使用して、動的なデバッガや同様のシステムでオブジェクトとメタ情報のマッピングを保守することもできます。 また、識別情報ベースのマップはequalsメソッドを意図的に歪ませることによって発生する「不正行為」を防ぐ場合に有用です。 (IdentityHashMapがキーに対してequalsメソッドを呼び出すことはありません)。 この実装のもう1つの利点は、高速だということです。