Java-コレクションフレームワーク
Java 2 より前の Java では、Dictionary、Vector、Stack、 などのアドホック クラスが提供されていました。 とプロパティ オブジェクトのグループを保存および操作します。これらのクラスは非常に便利でしたが、中心となる統一的なテーマが欠けていました。したがって、Vector の使用方法は、Properties の使用方法とは異なりました。
コレクションフレームワークは、次のようないくつかの目標を満たすように設計されました-
- <リ>
フレームワークは高性能でなければなりませんでした。基本的なコレクション (動的配列、リンク リスト、ツリー、およびハッシュ テーブル) の実装は、非常に効率的である必要がありました。
<リ>このフレームワークは、さまざまなタイプのコレクションが同様の方法で機能し、高度な相互運用性を備えている必要がありました.
<リ>フレームワークは、コレクションを簡単に拡張および/または適応させる必要がありました.
この目的に向けて、コレクション フレームワーク全体が一連の標準インターフェイスを中心に設計されています。 LinkedList、HashSet、 などのいくつかの標準実装 とツリーセット 、これらのインターフェイスのうち、そのまま使用できるものが提供されており、必要に応じて独自のコレクションを実装することもできます。
コレクション フレームワークは、コレクションを表現および操作するための統一されたアーキテクチャです。すべてのコレクション フレームワークには以下が含まれます −
- <リ>
インターフェース - これらは、コレクションを表す抽象データ型です。インターフェイスを使用すると、表現の詳細とは無関係にコレクションを操作できます。オブジェクト指向言語では、インターフェースは一般に階層を形成します。
<リ>実装、つまりクラス - これらは、コレクション インターフェイスの具体的な実装です。本質的に、それらは再利用可能なデータ構造です。
<リ>アルゴリズム - これらは、コレクション インターフェイスを実装するオブジェクトに対して、検索や並べ替えなどの便利な計算を実行するメソッドです。アルゴリズムはポリモーフィックであると言われています。つまり、適切なコレクション インターフェイスのさまざまな実装で同じメソッドを使用できます。
コレクションに加えて、フレームワークはいくつかのマップ インターフェイスとクラスを定義します。マップはキーと値のペアを格納します。地図はコレクションではありませんが ただし、コレクションと完全に統合されています。
コレクション インターフェース
コレクション フレームワークは、いくつかのインターフェイスを定義します。このセクションでは、各インターフェースの概要を説明します −
Sr.No. | インターフェースと説明 |
---|---|
1 | コレクション インターフェイス これにより、オブジェクトのグループを操作できます。コレクション階層の最上位にあります。 |
2 | リスト インターフェイス これは Collection を拡張します List のインスタンスは、順序付けられた要素のコレクションを格納します。 |
3 | セット これは Collection を拡張して、一意の要素を含む必要があるセットを処理します。 |
4 | SortedSet これは、並べ替えられたセットを処理するために Set を拡張します。 |
5 | 地図 これにより、一意のキーが値にマップされます。 |
6 | Map.Entry これは、マップ内の要素 (キーと値のペア) を記述します。これは Map の内部クラスです。 |
7 | SortedMap これは Map を拡張して、キーが昇順で維持されるようにします。 |
8 | 列挙 これは、オブジェクトのコレクション内の要素を列挙 (一度に 1 つずつ取得) できるメソッドを定義する従来のインターフェイスです。このレガシー インターフェイスは Iterator に取って代わられました。 |
コレクション クラス
Java は、Collection インターフェースを実装する一連の標準コレクション クラスを提供します。一部のクラスはそのまま使用できる完全な実装を提供し、他のクラスは抽象クラスであり、具体的なコレクションを作成するための開始点として使用される骨格実装を提供します。
標準コレクション クラスを次の表にまとめます −
Sr.No. | クラスと説明 |
---|---|
1 | 抽象コレクション Collection インターフェースのほとんどを実装します。 |
2 | 抽象リスト AbstractCollection を拡張し、ほとんどの List インターフェイスを実装します。 |
3 | AbstractSequentialList 要素へのランダム アクセスではなくシーケンシャル アクセスを使用するコレクションで使用するために、AbstractList を拡張します。 |
4 | LinkedList AbstractSequentialList を拡張してリンク リストを実装します。 |
5 | 配列リスト AbstractList を拡張して動的配列を実装します。 |
6 | 抽象セット AbstractCollection を拡張し、Set インターフェースのほとんどを実装します。 |
7 | ハッシュセット ハッシュ テーブルで使用するために AbstractSet を拡張します。 |
8 | LinkedHashSet HashSet を拡張して、挿入順序の反復を可能にします。 |
9 | ツリーセット ツリーに格納されたセットを実装します。 AbstractSet を拡張します。 |
10 | AbstractMap ほとんどの Map インターフェースを実装します。 |
11 | ハッシュマップ ハッシュ テーブルを使用するように AbstractMap を拡張します。 |
12 | ツリーマップ ツリーを使用するように AbstractMap を拡張します。 |
13 | WeakHashMap 弱いキーを持つハッシュ テーブルを使用するように AbstractMap を拡張します。 |
14 | LinkedHashMap HashMap を拡張して、挿入順序の反復を可能にします。 |
15 | IdentityHashMap AbstractMap を拡張し、ドキュメントを比較するときに参照の等価性を使用します。 |
AbstractCollection、AbstractSet、AbstractList、AbstractSequentialList と AbstractMap クラスは、コア コレクション インターフェースのスケルトン実装を提供し、実装に必要な労力を最小限に抑えます。
java.util によって定義された次のレガシー クラスについては、前の章で説明しました −
Sr.No. | クラスと説明 |
---|---|
1 | ベクトル これは動的配列を実装します。 ArrayList に似ていますが、いくつかの違いがあります。 |
2 | スタック Stack は、標準の後入れ先出しスタックを実装する Vector のサブクラスです。 |
3 | 辞書 Dictionary は、キー/値のストレージ リポジトリを表す抽象クラスであり、Map とほぼ同じように動作します。 |
4 | ハッシュテーブル Hashtable は元の java.util の一部であり、Dictionary の具体的な実装です。 |
5 | プロパティ Properties は Hashtable のサブクラスです。キーが文字列で、値も文字列である値のリストを維持するために使用されます。 |
6 | ビットセット BitSet クラスは、ビット値を保持する特別なタイプの配列を作成します。この配列は、必要に応じてサイズを増やすことができます。 |
収集アルゴリズム
コレクション フレームワークは、コレクションとマップに適用できるいくつかのアルゴリズムを定義します。これらのアルゴリズムは、コレクション クラス内の静的メソッドとして定義されます。
メソッドのいくつかは、ClassCastException をスローする可能性があります 、互換性のない型、または UnsupportedOperationException を比較しようとしたときに発生します 、変更不可能なコレクションを変更しようとしたときに発生します。
コレクションは、EMPTY_SET、EMPTY_LIST、および EMPTY_MAP の 3 つの静的変数を定義します。すべて不変です。
Sr.No. | アルゴリズムと説明 |
---|---|
1 | 収集アルゴリズム すべてのアルゴリズム実装のリストです。 |
イテレータの使い方
多くの場合、コレクション内の要素を循環させたいと思うでしょう。たとえば、各要素を表示したい場合があります。
これを行う最も簡単な方法は、Iterator または ListIterator インターフェイスのいずれかを実装するオブジェクトである反復子を使用することです。
イテレータを使用すると、要素を取得または削除して、コレクションを循環できます。 ListIterator は Iterator を拡張して、リストの双方向トラバーサルと要素の変更を可能にします。
Sr.No. | イテレータのメソッドと説明 |
---|---|
1 | Java イテレータの使用 以下は、Iterator および ListIterator インターフェースによって提供される例を含むすべてのメソッドのリストです。 |
コンパレータの使い方
TreeSet と TreeMap はどちらも要素をソートされた順序で格納します。ただし、ソート順を正確に定義するのは比較演算子です。
このインターフェイスを使用すると、特定のコレクションをさまざまな方法で並べ替えることができます。また、このインターフェイスを使用して、任意のクラスの任意のインスタンスを並べ替えることができます (変更できないクラスであっても)。
Sr.No. | イテレータのメソッドと説明 |
---|---|
1 | Java コンパレータの使用 以下は、Comparator Interface によって提供される例を含むすべてのメソッドのリストです。 |
まとめ
Java コレクション フレームワークにより、プログラマーはパッケージ化されたデータ構造とそれらを操作するためのアルゴリズムにアクセスできます。
コレクションは、他のオブジェクトへの参照を保持できるオブジェクトです。コレクション インターフェイスは、各タイプのコレクションで実行できる操作を宣言します。
コレクション フレームワークのクラスとインターフェースは、パッケージ java.util にあります。
Java