Java コレクション フレームワーク


Java 2 のずっと前から、Java はアドホック クラスを提供していました。例: Dictionary、Vector、Stack、および Properties クラスは、オブジェクトのグループを保存および操作するために使用されます。

これらのクラスは非常に便利ですが、核となる統一テーマが不足しています。このため、Vector クラスの使用方法は、Properties クラスの使用方法とは大きく異なります。

収集フレームワークは、次の目標を満たすように設計されています。

  • フレームワークはパフォーマンスが高くなければなりません。基本的なコレクション (動的配列、リンク リスト、ツリー、ハッシュ テーブル) の実装も効率的でなければなりません。

  • このフレームワークにより、さまざまな種類のコレクションが高度な相互運用性を備えた同様の方法で動作できるようになります。

  • コレクションの拡張と適応は簡単でなければなりません。

この目的を達成するために、コレクション フレームワーク全体が一連の標準インターフェイスを中心に設計されています。 LinkedList、HashSet、TreeSet などのこれらのインターフェイスの標準実装を直接使用できます。さらに、これらのインターフェイスを通じて独自のコレクションを実装することもできます。

コレクション フレームワークは、コレクションを表現および操作するための統合アーキテクチャです。すべてのコレクション フレームワークには以下が含まれます:

  • インターフェイス: はコレクションを表す抽象データ型です。インターフェイスを使用すると、コレクションはその表現の詳細を独立して操作できます。オブジェクト指向言語では、通常、インターフェイスは階層を形成します。

  • 実装(クラス): は、コレクションインターフェイスの特定の実装です。基本的に、これらは再利用可能なデータ構造です。

  • アルゴリズム: は、検索や並べ替えなどの便利な計算を実行するコレクション インターフェイスを実装するオブジェクト内のメソッドです。これらのアルゴリズムは、同じメソッドが同様のインターフェイス上で異なる実装を持つことができるため、ポリモーフィックと呼ばれます。

コレクションに加えて、フレームワークはいくつかの Map インターフェイスとクラスも定義します。 Map にはキーと値のペアが格納されます。マップはコレクションではありませんが、コレクションに完全に統合されています。


コレクション インターフェイス

コレクション フレームワークは、いくつかのインターフェイスを定義します。このセクションでは、各インターフェースの概要を説明します:

シリアル番号インターフェースの説明
1コレクションインターフェース
を使用すると、オブジェクトのセットを使用できるようになり、コレクション階層のルートインターフェースです。
2List インターフェイス
Collection から継承し、List インスタンスは順序付けられたコレクションの要素を格納します。
3Set
Collectionを継承しており、重複した要素を含まないコレクションです。
4SortedSet
Set から継承して順序付きセットを保存します。
5Map
は、一意のキーを値にマップします。
6Map.Entry
Map 内の要素 (キー/値のペア) を記述します。 Map の内部クラスです。
7SortedMap
Map から継承され、Key を昇順に保ちます。
8列挙
これは、オブジェクトのコレクション内の要素を列挙 (一度に 1 つずつ取得) できる従来のインターフェイスおよび定義されたメソッドです。この従来のインターフェイスはイテレータに置き換えられました。

コレクション クラス

Java は、Collection インターフェースを実装する標準コレクション クラスのセットを提供します。それらの中には、直接使用できる具体的なクラスもあれば、インターフェイスの部分的な実装を提供する抽象クラスもあります。

標準のコレクション クラスを次の表にまとめます。

シリアル番号クラスの説明
1AbstractCollection
は、コレクションインターフェイスのほとんどを実装します。
2AbstractList
は AbstractCollection を継承し、List インターフェイスの大部分を実装します。
3AbstractSequentialList
AbstractList から継承し、ランダム アクセスではなくデータ要素への連鎖アクセスを提供します。
4LinkedList
は、AbstractSequentialListを継承し、リンクされたリストを実装します。
5ArrayList
は、AbstractListを継承することで動的配列を実装します。
6AbstractSet
は AbstractCollection を継承し、Set インターフェースの大部分を実装します。
7HashSet
はAbstractSetを継承しハッシュテーブルを使用します。
8LinkedHashSet
予測可能な反復順序を持つ Set インターフェイスのハッシュ テーブルとリンク リストの実装。
9TreeSet
AbstractSetから継承し、自然な順序を使用して要素を並べ替えます。
10AbstractMap
は、Mapインターフェースの大部分を実装します。
11HashMap
HashMapは、キーと値のマッピングを格納するハッシュテーブルです。
HashMap は AbstractMap を継承し、Map、Cloneable、および java.io.Serializable インターフェースを実装します。
12TreeMap
はAbstractMapを継承してツリーを使用します。
13WeakHashMap
AbstractMapクラスを継承し、弱いキーのハッシュテーブルを使用します。
14LinkedHashMap
HashMapから継承され、要素の自然順序を使用して要素を並べ替えます。
15IdentityHashMap
AbstractMapクラスを継承し、ドキュメントを比較するときに参照の等価性を使用します。

前のチュートリアルでは、次のように java.util パッケージで定義されたクラスを通して説明しました:

5Properties6BitSet
シリアル番号クラスの説明
1Vector
Vector クラスは動的配列を実装します。 ArrayList に似ていますが、異なります。
2Stack
Stack は、標準の後入れ先出しスタックを実装する Vector のサブクラスです。
3Dictionary
Dictionary クラスは、キーと値のペアを格納するために使用される抽象クラスであり、その機能は Map クラスに似ています。
4Hashtable
Hashtable はオリジナルの java.util の一部であり、Dictionary の特定の実装です。
Properties は Hashtable から継承し、プロパティ リスト内の各キーとそれに対応する値を表します。
Bitset クラスは、ビット値を保持する特別なタイプの配列を作成します。 BitSet 内の配列のサイズは、必要に応じて増加します。
Bitset クラスは、ビット値を保持する特別なタイプの配列を作成します。 BitSet 内の配列のサイズは、必要に応じて増加します。


アルゴリズムの設定

コレクション フレームワークは、コレクションとマッピングに使用できるいくつかのアルゴリズムを定義します。これらのアルゴリズムは、コレクション クラスの静的メソッドとして定義されます。

一部のメソッドは、互換性のない型を比較しようとすると ClassCastException をスローすることがあります。変更不可能なコレクションを変更しようとすると、UnsupportedOperationException がスローされます。

このセットは、EMPTY_SET EMPTY_LIST、EMPTY_MAP の 3 つの静的変数を定義します。これらの変数はいずれも変更できません。


シリアル番号 アルゴリズムの説明 1 収集アルゴリズム
すべてのアルゴリズム実装のリストは次のとおりです。

イテレーターの使用方法

通常、コレクション内の要素を反復処理する必要があります。たとえば、コレクション内の各要素を表示します。

これを行う最も簡単な方法は、Iterator インターフェイスまたは ListIterator インターフェイスを実装するオブジェクトであるイテレーターを使用することです。

イテレーターを使用すると、ループを通じてコレクションの要素を取得または削除できます。 ListIterator は Iterator を拡張して、リストの双方向のトラバースと要素の変更を可能にします。

ここでは、Iterator インターフェイスと listIterator インターフェイスによって提供されるすべてのメソッドを例を通して示します。 <table class="リファレンス>

シリアル番号 イテレーターメソッドの説明 1 Java イテレータの使用

コンパレータの使用方法

TreeSet と TreeMap は要素をソート順に保存しますが、どのようなソート順序に従うかを正確に定義するのはコンパレータです。

このインターフェースを使用すると、さまざまな方法でコレクションを並べ替えることができます。


シリアル番号 コンパレータメソッドの説明
1 Java コンパレーターの使用
ここでは、Comparator インターフェイスによって提供されるすべてのメソッドを例を通して示します

概要

Java コレクション フレームワークは、プログラマに、事前にパッケージ化されたデータ構造と、それらを操作するためのアルゴリズムを提供します。

コレクションは、他のオブジェクトへの参照を保持するオブジェクトです。コレクション インターフェイスは、各タイプのコレクションに対して実行できる操作を宣言します。

コレクション フレームワークのクラスとインターフェイスは java.util パッケージにあります。