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