いくつかの基本的なコンテナで

ただ、学ぶ慌て少しを書き始めて。

配列リスト

参考ブログ:https://www.cnblogs.com/leesf456/p/5308358.html

図1は、基礎となるデータ構造は、実際のArrayList可変配列である、配列要素型がObject型であり、NULLが許可され、各種データを格納することができます。

2、ArrayListには(リストが動作仕様を指定)抽象親クラスAbstractListは、Listインタフェースを実現継承し、ランダム・(ランダムアクセス)、Cloneableを(可能なコピー)、シリアライズ(直列化可能)。

public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable

図3に示すように、アレイ10のデフォルトサイズは、要素の実際の数は、デフォルトで0です。

図4に示すように、要素の実際の数の大きさが容量に達したとき、配列の大きさの膨張は、古いアレイの約1.5倍のサイズになった後、膨張は、実行されます。特殊なケース:配列の新しい最大サイズの拡大、あなただけの最大値を取ることができます。

図5は、機能を削除、最後まで素子意志インデックスは、1つ前に移動され、そして最後の位置はNULLに設定され、これは便利なGCのために行われます。

図6は、同時変更の顔に、フェイルファスト(フェイルファスト)のメカニズムを使用して、イテレータは、速やかにかつクリーンに失敗します。

LinkedListの

参考ブログ:https://www.cnblogs.com/leesf456/p/5308843.html

図1は、基礎となるデータ構造は二重リストのLinkedListを連結し、両前方横断こと、逆に端部からトラバースすることができるヘッドノードとヘッドのエンドノードを有しています。NULLが許可されています。

図2に示すように、ノードは、クラスノードのインスタンスの二重リンクリストである、メンバ変数が含まれる:PREV、次の項目。前のノードであるノードは、次のノードの次のノードは、アイテムがノードの値です。

図3に示すように、関数を取得し、機能ノードのaddAll関数が使用され、ノードの機能の役割は、ノードとリターン指数の指数を見つけることです。小さな関数の最適化を有するノードにおいて、最初のトラバーサルは、このように保存、最もN / 2個の要素を確実に、添字前半または後半に、前方横に前半部分、そうでなければ逆方向移動を決定します時間。

HashMapの

参考ブログ:パッチワークの外観を。

図1に示すように、リストの基礎となるハッシュマップは、配列+ +赤黒木(まだ赤黒木学習する)の実装であり、アレイのそれぞれは、ヌル・キーとヌル値を可能にする一方向リンクリストであるが、順序マッピングを保証するものではありません。

図2に示すように、アレイ16は、デフォルトのサイズは、デフォルトのサイズと負荷率が0.75であり、容量が設定され、負荷率自体は、数量を乗じたキー値上に配置されたときに負荷率(即ち、閾値)の容量を超えることができる、拡張になります。

図3に示すように、ときにハッシュ値が等しい場合、鎖の長さが8を超える場合、それは、リンクされたリストを形成する、のハッシュキーは、クエリの変換効率を低下させ、赤黒木に変換されます。

図4は、フェイルファスト機構を使用して、修飾modCount値のレコードの数を介して、HashMapのコンテンツへの変更は、この値を増加します。等しくない場合は、イテレータの初期化処理は、等しいとexpectedModCount modCountかどうかを判断するために反復プロセスでは、expectedModCountイテレータ値を割り当てます、例外をスローし、他のスレッドの修正は、地図がすぐに、既に存在していると言います。

ハッシュ表

参考ブログ:https://blog.csdn.net/varyall/article/details/80992123

図1に示すように、フェイルファストメカニズムを使用。

図2は、底部層は、ヌル・キーとヌル値が許可されていない実施アレイ+ハッシュテーブル、リスト、です。

図3に示すように、アレイ11のデフォルト容量、0.75の負荷率は、自分自身を設定することができます。

4、およびHashMapのは、同様の達成、及び赤黒木のない導入。

図5は、膨張時に、新しい配列の長さは、古い長* 2 + 1の配列です。

ハッシュテーブルの差ハッシュマップ

1、HashMapのキーとヌル値にヌルの任意の数の存在を可能にすることができるが、ハッシュテーブルのキーと値は、nullにできません。

2、ハッシュテーブルの方法が同期され、HashMapのアプローチではありません。それはハッシュテーブルを使用した場合、マルチスレッドの同期に来る場合、それは一般的に推奨されていましたので、それはHashMapの使用を必要としません。

図3に示すように、二つの異なるトラバーサルの内部実装。ハッシュテーブルは、HashMapのは、Iteratorを使用しています。そして、歴史的な理由のために、ハッシュテーブルはまた、列挙方法を使用していました。

図4に示すように、異なるハッシュ値を計算しました。得られたハッシュ値は、最終ハッシュ値上に、ハッシュテーブルハッシュコード法により算出され、そしてHashMapのは、最終ハッシュ値を与えるために、右のXOR 16の後ハッシュコード法により得られたハッシュ値と、ハッシュ値を計算することです。

公開された150元の記事 ウォンの賞賛4 ビュー6882

おすすめ

転載: blog.csdn.net/Napom/article/details/104827654
おすすめ