ArrayListのとHashMapの解釈

配列リスト

データ構造:配列

機能

  • 高速クエリ:配列が連続した領域で、最初のアドレスを介して、あなたは、配列を見つけることができますが、あなたはインデックスで1つの要素の配列を見つけることができます

  • スローの追加:配列の長さが固定されているが、要素の追加や削除、新しい配列を作成する必要があり、元の配列を介してデータをコピーします

  • private static final int DEFAULT_CAPACITY = 10; 初期容量:10

  • ArrayList<> list = new ArrayList<>(8); - >元の配列の長さを設定するために - > InitialCapacityの値= 8

    if (initialCapacity > 0) { // 初始容量大于0
    this.elementData = new Object[initialCapacity]; // 初始化元素数组
    }

膨張機構

最初に呼び出されたときに最初の添加元素ensureCapacityInternal(int minCapacity)の最小セットの容量を確認する空の配列かどうかを決定する方法であって、minCapacity

  • 配列が空の場合、最小容量に設定されminCapacity、デフォルトの容量を設定するDEFAULT_CAPACITY(容量:10)

  • それは空の配列ではない場合、メソッドを呼び出してensureExplicitCapacity(int minCapacity)、追加の容量が必要とされているかどうかを判断します

    分析条件:IF(minCapacityにすること- elementData.length> 0)(minCapacityにすること:セット内の要素の+1した実際の数)

    • 容量が必要とされている:呼び出しgrow(int minCapacity)、元の配列の拡張elementData1.5倍の、そして配列は深いコピー(上書き)が割り当てられている元の配列elementData
    • 拡張、メソッドの終了を必要としないでください。

HashMapの

次のように基礎となるデータ構造は以下の通りである:ビットバケット(アレイ)連結リストブラックツリー

#### HashMapの実装がでています

  • ハッシュマップアレイ16の初期長さを、入力ハッシュマップ配列[]の長さの2のべき乗、配列の配列要素の数がより大きい倍0.75(負荷率)時間は、それがあろう膨張
  • 入れ:記憶素子に、第一のハッシュコードを介して()ハッシュコードのキー得られた値を返し、次にハッシュコードは、最終的にハッシュを介してモジュロ(ハッシュ値を得るために計算され、ハッシュ・(長さ- 1):ビット操作 [効率詳細高い] -ハッシュ%の長さに相当>)ビット記憶バレル(アレイ)の位置を算出しました。(長さは、配列の長さは、2の累乗です)
    • キーのハッシュコードの取得値
    • 再計算されたハッシュ値を計算に関与高いのhashCode **
    • 実行**&計算(table.length配列の長さ) - 計算**ハッシュ値(1 table.length)
  • 最後に計算され、同じハッシュ値場合、場所はリストにリンク(アレイ)浴槽の同じビット位置を格納します
  • 場合> = 8の鎖長は、それがあろう赤黒木に変換リストの店舗

なぜ配列の初期の長さは16であり、2の累乗ですか?

16の理由の**長さ:**バケットバケット配列の初期設定は、あまりにも、メモリ空間の無駄になる場合、16は妥協の大きさではありません、どちらも、このような1,2,3-拡張など、いくつかの要素の上に置きました廃棄物の多くを引き起こすように、また、数万人のようなあなただけのスペースを少し使用することができませんでした。

2のべき乗の理由:代わりの動作%が使用&操作、パフォーマンスを向上させることができ

なぜ負荷率が0.75でありますか?

検索時のパフォーマンスを増加させる、いくつかの値の値を負荷率が設定が大きすぎるため、より大きなバケットの位置との衝突バケットの可能性の鍵となり、0.75の代わりに1に設定されて記憶されていてもよいです10バレル、しきい値1、その後、それが0.1である場合には小さすぎず、適切な設定落とし、次の2つのキーと値のペアの拡大、スペースの無駄を置く必要があります。

公開された12元の記事 ウォンの賞賛0 ビュー57

おすすめ

転載: blog.csdn.net/DavinDeng/article/details/104917885