Java のコンテナに関する基本的な知識を本当に理解できましたか?

序文: 誰もがさまざまな重要な知識点を予備的に理解できるように、シンプルで理解しやすい一般的な言語を使用するように努めてください。それをよく学び、疑問を持ち、よく考え、明確に識別し、真剣に実践してください。

 

1. コンテナ(コレクション)

 

図に示すように、コレクション コンテナーは実際には、独立した要素を格納するために使用されるさまざまなデータ構造です。これは主に Set、List、Queue などのデータ構造であり、いくつかの異なる属性や特性を持つさまざまなブランチに分かれています。コレクションはコレクション フレームワーク全体の基礎であり、オブジェクトのセットを維持するための基本インターフェイスを提供します。

 

1、配列リスト

ArrayList は実際には動的配列または拡張可能な配列です。最下層も配列の実装です。基本容量は 10 で、拡張メカニズムは (サイズ * 1.5) です。つまり、各拡張は前の拡張の 1.5 倍です。また、データ量が多い場合には継続的な拡張が必要となるため、データの書き込みが遅くなります。

 

2、リンクリスト

LinkedList はシーケンシャル アクセス構造、つまりリンク リストであり、内部では双方向リストとして実装されているため、先頭と末尾のデータの追加と削除は高速になり、ランダムな挿入にはトラバーサルが必要です。

 

3、ベクトル

Vector は ArrayList に似ていますが、展開メカニズムが異なり、展開メカニズムはデフォルトで 2 倍であり、それに比べてスレッドセーフです。Vector のメソッドのほとんどは同期(同期) されていますが、ArrayList のメソッドは同期されていないためです。そして、Stack は Vector のサブクラスです。

 

 2、Mapクラス

 

1、ハッシュマップ

HashMap は最も一般的に使用される Map 構造です。通常、 KVキーと値のペアの形式でデータを保存するために使用され、キーと値のペアを保存するために配列が使用されます。配列の添字はキーのハッシュコードに従って決定されます。 。また、JDK の現在のバージョンでは、HashMap の基礎となる実装は配列 + ツリー + リンク リストの形式になっています。一般に、キーが複数の値に対応し、ハッシュコードの添字に対応するリンク リストが しきい​​値を超える場合にのみ、リンク リストは赤黒ツリーに再構築されます。検索の時間計算量は、リンク リストの O(n) から赤黒ツリーの O(log2n) に変更されます。

デフォルトの容量は 16 で、拡張は size*2 であり、これは 2 の指数である必要があります。

 

 2、リンクされたハッシュマップ

HashMap と比較すると、LINkedHashMap は内部的に二重リンク リストを維持するため、保存されたデータは順序付けされていますが、HashMap は一般に順序付けされていません。そして、二重にリンクされたリストは循環とみなすことができます。

 

 

 3、ハッシュテーブル

HashTable は HashMap に似ていますが、次のような違いがあります。

1. HashMap では、1 つの Null 値のみを Key として保存できますが、HashTable では保存できません。

2. HashTable は Sybchronized によって変更されます。つまり、その実装はスレッドセーフですが、HashMap はそうではありません。

3. HashTable のデフォルトの容量は 11 で、拡張メカニズムはsize*2+1 です

 

 4、ツリーマップ

HashMap と似ていますが、異なる点は、lSortMap インターフェイスを実装しており、順番またはカスタム順序で走査できることです。

 

 3、セット(コレクション)

 

1、ハッシュセット

コレクションの 2 つのプロパティ:

1. HashSet 内に重複した要素を含めることはできません

2. Null は最大 1 つだけ許可されます。

 そして、HashSet は実際にはスレッドセーフではなく、保存されたデータも順序が狂います。

2、リンクされたハッシュセット

HashSet と比較して、LinkedHashSet はデータを維持するために内部に二重リンクされたリストがあるため、要素の挿入順序を維持できます。

3、ツリーセット

TreeSet は HashSet の特性をすべて備えており、ソートも可能であり、Comparator (コンパレータ) を実装することでソートも可能です。

4. 待ち行列

 

1、ブロッキングキュー

マルチスレッド環境では、「プロデューサー - コンシューマー」モデルがよく使用され、プロダクションを担当するスレッドが、生成されたリソースを共有コンテナーに入れ、コンシューマーによって取り出されます。通常、このコンテナはキューまたはスタックになります。ブロッキング キューは、ウェアハウスがいっぱいの場合は実稼働スレッドを一時停止し、ウェアハウスが空の場合はコンシューマ スレッドを一時停止できます。

 

2、配列ブロックキュー

ArrayBlockingQueue は FIFO の特性を満たす配列ベースの有界ブロッキングキューであり、代表的な有界バッファであり、配列のサイズは固定であり、一度決まると変更することはできません。

 

3、LinkedBlockingQueue

LinkedBlockingQueue はリンク リストに基づいて実装されており、容量を指定することができ、値とストレージ値に対応する 2 つのリエントラント ロックを持ちます。

 

4、優先ブロッキングキュー

PriorityBlockingQueue は FIFO キューではないため、Comparator または Comparable インターフェイスを提供する必要があり、キューのヘッド要素は最小の要素です。これは、配列を使用して実装された最小限のヒープ構造でもあります。

投稿するのは簡単ではありません。偉い人は手を挙げてください。


好き: 好きは一種の美徳であり、上司が私の作品を認めてくれることです。


コメント: 白い接点はありません、それはあなたと私のコミュニケーションの始まりです!


コレクション: もっと選んでください。これは上司からの感謝の気持ちです。

 

おすすめ

転載: blog.csdn.net/m0_55278347/article/details/130515304