この記事の内容は、コレクションとは何ですか? Java コレクションの基本的な概要 (フレーム図付き) は、必要な友人が参考にできることを願っています。
コレクションとは何ですか?
Java コレクション クラスは java.util パッケージに格納され、オブジェクトを格納するために使用されるコンテナです。
注: ① コレクションはオブジェクトのみを保存できます。たとえば、int 型のデータ 1 をコレクションに保存すると、実際には、Java の各基本型には自動的に Integer クラスに変換されて格納されます。
②. コレクションには複数のオブジェクトへの参照が格納されますが、オブジェクト自体は引き続きヒープ メモリに配置されます。
③. コレクションには、さまざまな種類のデータと無制限の数のデータを保存できます。
Java コレクション クラスの基本概念
プログラミングでは、多くの場合、複数のデータを一元的な方法で保存する必要があります。従来、保存するオブジェクトの数が事前に正確にわかっている場合には、配列が良い選択となります。配列の初期化中に配列の長さを指定すると、配列の長さは不変になります。動的に増加する可能性のあるデータを保存する必要がある場合は、Java のコレクション クラスが適切な設計になります。
コレクション クラスは主に他のデータの保存と保持を担当するため、コレクション クラスはコンテナ クラスとも呼ばれます。すべてのコレクション クラスは java.util パッケージの下にあります。その後、マルチスレッド環境での同時実行セキュリティの問題に対処するために、java5 では java.util.concurrent パッケージの下にマルチスレッド サポートを備えたいくつかのコレクション クラスも提供されました。
Java のコレクション クラスの API とプログラミング原理を学習する場合、「セット」は Java の出現よりも前の非常に古い数学的概念であることを理解する必要があります。数学的概念の観点からコレクションを理解すると、プログラミングでどのタイプのコレクション クラスをいつ使用するかをより深く理解できるようになります。
Java コンテナ クラス ライブラリの目的は、「オブジェクトを保存」し、それらを 2 つの異なる概念に分割することです:
1) コレクション
「反対の」要素のセット。通常はこれらです。要素は特定のルールに従います
1.1) リストは要素の特定の順序を維持する必要があります
1.2) セットには重複した要素を含めることはできません
1.3) キューはキューの順序を維持します (先入れ先出し)
2 ) マップ
「キーと値のペア」オブジェクトのペアのセット
1) コレクションは各位置に 1 つの要素 (オブジェクト) のみを保存できます
2) マップの保存「キーと値のペア」。小さなデータベースのようなもの。 「キー」
Java コレクション クラス アーキテクチャの階層関係
# を通じて、キーに対応する「値」を見つけることができます。1. インターフェイス Iterable
Iterator インターフェイス、これは Collection クラスの親インターフェイスです。この Iterable インターフェイスを実装するオブジェクトでは、foreach を使用した走査が可能です。つまり、すべての Collection オブジェクトは「foreach 走査可能性」を備えています。この Iterable インターフェイスにはメソッドが 1 つだけあります: iterator()。現在のコレクション オブジェクトを表す汎用の
1.1 Collection
Collection は、呼び出されるオブジェクト要素のコレクションを表します。コレクション。コレクションは標準定義を提供するインターフェイスであり、使用のためにインスタンス化することはできません
1) Set
Set コレクションは jar に似ており、Set コレクションに「スローされる」複数のオブジェクトの間に明確な順序はありません。 Set は Collection インターフェイスから継承し、重複した要素を含めることはできません (これは Set クラス階層全体の共通プロパティであることに注意してください)。
Set は、「==」演算子を使用するのではなく、equals メソッドを使用して、2 つのオブジェクトが同一であると判断します。つまり、新しい要素を追加するときに、新しい要素オブジェクトと Set 内の既存のオブジェクトの間の等価比較が false を返した場合、Set は新しい要素オブジェクトを受け入れますが、それ以外の場合は拒否されます。
このような Set の制限があるため、Set コレクションを使用する場合は、1) Set コレクション内の要素の実装クラスに対して有効な等しい (Object) メソッドを実装する、2) コンストラクターに対して、の 2 点に注意する必要があります。 Set の場合、渡された Collection パラメータには重複した要素を含めることはできません
1.1) HashSet
1. HashSet は、HASH アルゴリズムを使用してコレクションに要素を格納するため、優れた機能を備えています。アクセスと検索のパフォーマンス。要素が HashSet コレクションに格納されると、HashSet はオブジェクトの hashCode() メソッドを呼び出してオブジェクトの hashCode 値を取得し、HashCode 値に基づいて HashSet 内のオブジェクトの格納場所を決定します。
# LinkedHashSet コレクションは、ハッシュに基づいて要素の保存場所も決定します。要素のコード値ですが、HashSet とは異なり、リンクされたリストを使用して要素の順序を維持するため、要素が表示されます。挿入した順に保存されます。
LinkedHashSet コレクション内の要素を走査するとき、LinkedHashSet は要素が追加された順序でコレクション内の要素にアクセスします。
LinkedHashSet は要素の挿入順序を維持する必要があるため、パフォーマンスは HashSet よりもわずかに低くなりますが、Set 内のすべての要素に反復的にアクセスする (トラバーサル) 場合は良好なパフォーマンスが得られます (リンクされたリストはトラバーサルに非常に適しています)
1.2 ) SortedSet
このインターフェースは主にソート操作に使用されます。つまり、このインターフェースを実装するサブクラスはソートされたサブクラスに属します。
1.2.1) TreeSet
Treeset は、 SortedSet インターフェイス。
1.3) EnumSet
EnumSet は、列挙型クラス用に特別に設計されたコレクション クラスです。この列挙型は、列挙型の作成時に表示されます。 EnumSet 式、または暗黙的に指定されます。 EnumSet のコレクション要素にも順序があります。
これらは、Enum クラスの列挙値の定義順序に基づいてコレクション要素の順序を決定します。
2) List
List コレクションは、順序付けされたオブジェクトを表します。および反復可能な要素セットの場合、セット内の各要素には対応する順次インデックスがあります。 List コレクションでは、インデックスを介して指定された位置にあるコレクション要素にアクセスできるため、重複した要素を追加できます。デフォルトでは、List コレクションは追加された順序で要素のインデックスを設定します。
2.1) ArrayList
2.1) ArrayList は、配列に基づいて実装された List クラスであり、動的に成長する Object[] 配列をカプセル化します。再配布を許可します。
2.2) Vector
Vector と ArrayList の使い方はほぼ同じですが、Vector は古いコレクションのため、長いメソッド名を持つメソッドがいくつか用意されていますが、JDK1.2 以降では、コレクションのフレームワークを理解した上で Java が提供しますシステムの
を変更して List インターフェイスを実装し、コレクション フレームワーク システム
2.2.1) スタック
に統合します。Stack は、「スタック」のデータ構造をシミュレートするために Vector によって提供されるサブクラスです (lifo 後方優先)
2.3) linkedList
list & lt; deque & lt; を実装します。 List インターフェイスを実装し、それに対してキュー操作を実行します。つまり、インデックスに基づいてコレクション内の要素にランダムにアクセスできます。同時に、Deque インターフェイスも実装されています。つまり、LinkedList は両端キュー
として使用できます。もちろん、「スタック」としても使用できます。
3) キュー
Queue は、「キュー」のデータ構造 (先入れ先出し FIFO) をシミュレートするために使用されます。キューの先頭にはキュー内での保存時間が最も長い要素が保持され、キューの末尾にはキュー内での保存時間が最も短い要素が保持されます。新しい要素がキューの最後に挿入 (オファー) されます。
要素へのアクセス (ポーリング) 操作では、キューの先頭にある要素が返されます。キュー内の要素へのランダム アクセスは許可されません。この概念は、一般的なキューイングを組み合わせることでよく理解できます。
3.1) PriorityQueue
PriorityQueue は比較的標準的なキュー実装ではありません。PriorityQueue によってキュー要素が保存される順序は、キュー要素に参加する順序ではありません。要素のサイズはキューの順序で並べ替えられます。これはクラス名からもわかります。
3.2) Deque
Deque インターフェイスは「両端キュー」を表します。両端から同時にキューを追加したり、要素を削除したりできるため、Deque の実装クラスをキューまたはスタックとして使用できます。コレクションの格納には、動的で再割り当て可能な Object[] 配列が使用されます。コレクション要素が配列の容量を超えると、システムはコレクション要素を格納するために新しい Object[] 配列を再割り当てします。
3.2. LinkedList
1.2 Map
Map は「マッピング関係」でデータを保存するために使用されるため、Map コレクションには 2 つの値のセットが保存されます。1 つの値のセットは Map にキーを保存するために使用され、もう 1 つの値のセットはマップにキーを保存するために使用されます。値をマップに保存するために使用されます。キーと値はどちらも、任意の参照タイプのデータにすることができます。マップ キーは繰り返して使用することはできません。つまり、同じ Map オブジェクトの 2 つのキーは、equals メソッドと比較すると常に false を返します。
Map については、コードの再利用の観点から理解する必要があります。Java はまず Map を実装し、次にすべての値が null の Map をパッケージ化することで Set コレクションを実装します。 -Map のクラス インターフェイスに設定されたキーの保存形式は Set コレクションとまったく同じです (つまり、キーを繰り返すことはできません)
これらの実装クラスおよびサブインターフェイスに設定された値の保存形式Map は List とよく似ています (つまり、インデックスに従って値を繰り返し検索できます)
1) HashMap
要素の順序を保証できない HashSet コレクションと同様に、HashMap も要素の順序を保証できませんキーと値のペアの。そして、HashSet と同様に、2 つのキーが等しいかどうかを判断する基準は次のとおりです。2 つのキーは、equals() メソッドを通じて true を返すために比較されます。
同時に、2 つのキーの hashCode 値も必要です。等しい
1.1) LinkedHashMap
LinkedHashMap も使用します。 キーと値のペアの順序を維持するには、二重リンク リストを使用します。 リンク リストは、マップの反復順序を維持する役割を果たします。これは、マップの挿入順序と一致します。キーと値のペア (すべてのキーと値のペアを並べ替えるという点で TreeMap とは異なることに注意してください)
## 2) Hashtable
は古い Map 実装クラスです
2.1) Properties
Properties オブジェクトは次のとおりです。プロパティ ファイル (Windows プラットフォームの .ini ファイル) を処理する場合に特に便利です。Properties クラスは、Map オブジェクトと関連付けられた属性ファイルを結合できるため、Map オブジェクトのキーと値のペアを属性ファイルに書き込むことができます。 、または属性ファイル内の「属性名 - 属性値」を Map オブジェクトにロードできます。
3 ) SortedMap
Set インターフェイスが SortedSet サブインターフェイスを派生し、SortedSet インターフェイスには TreeSet 実装があるのと同じです。クラス、Map インターフェイスも SortedMap サブインターフェイスを派生し、SortedMap インターフェイスには TreeMap 実装もあります。 class
3.1) TreeMap
TreeMap これは赤と黒のツリー データ構造であり、各キーと値のペアが機能します。赤黒木のノードとして。 TreeMap がキーと値のペア (ノード) を格納する場合、キーに従ってノードを並べ替える必要があります。 TreeMap は、すべてのキーと値のペアが順序付けられた状態であることを保証できます。同様に、TreeMap にも 2 つの並べ替え方法があります。自然な並べ替えとカスタマイズされた並べ替えです。
4) WeakHashMap
WeakHashMap と HashMap の使用法は基本的に似ています。違いは、HashMap キーが実際のオブジェクトへの「強い参照」を保持することです。つまり、HashMap オブジェクトが破棄されない限り、HashMap によって参照されるオブジェクトはガベージ コレクションされません。
ただし、WeakHashMap のキーは実際のオブジェクトへの弱参照のみを保持します。つまり、WeakHashMap オブジェクトのキーによって参照されるオブジェクトが他の強参照変数によって参照されない場合、これらのキーによって参照されるオブジェクトはガベージである可能性があります。キーに対応する実際のオブジェクトがガベージ コレクションされると、WeakHashMap はこれらのキーに対応するキーと値のペアも自動的に削除する場合があります。
5) IdentityHashMap
IdentityHashMap の実装メカニズムは、基本的に IdentityHashMap と同様です。 , IdentityHashMap は、2 つのキーが厳密に等しい場合にのみ等しいとみなします (key1 == key2)
6) EnumMap
EnumMap は、列挙型クラスで使用される Map 実装です。EnumMap 内のすべてのキーは、次の列挙値である必要があります。単一の列挙クラス。 EnumMap を作成するときは、対応する列挙クラスを明示的または暗黙的に指定する必要があります。 EnumMap は、キーの自然な順序に基づいています
(つまり、列挙値が列挙クラスで定義される順序)
Java コレクション フレームワーク図
Java コレクション フレームワーク アーキテクチャの概要
以上がコレクションとは何ですか? Java コレクションの基本入門 (フレームワーク図付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。