ホームページ >Java >&#&チュートリアル >Java コレクション クラス Hashmap の詳細な紹介 (コード例)
この記事では、Java コレクション クラス Hashmap について詳しく説明します (コード例)。必要な方は参考にしてください。助けてくれた。
1. HashMap の概要
HashMap は、プログラマーの開発プロセスで非常に一般的に使用されるコレクション クラスであり、キーと値のペアの形式で存在します。
#開発では、キーが存在する場合にキーを置き換える機能を利用して、更新された重複排除操作を実装できます。 もう 1 つの便利な方法として、map と fastJson を使用して、必要な json データ形式をすばやく形成できます。 jdk1.8以前では、HashMapは配列連結リストの形式で存在しており、putキーのhashCodeを摂動関数で計算してハッシュ値を求め、その値を(n-)で計算していました。 1)&hash。対応する位置に移動します (n は配列の長さを表します)。ハッシュの競合が発生した場合は、まずキーが存在するかどうかを確認し、存在する場合は上書きします。そうでない場合は、「」を使用します。ジッパー メソッド」を使用して競合を解決し、リンク リストを作成します。 しかし、jdk1.8 以降、HashMap は変更されました。現在のリンク リストの長さがしきい値 (デフォルトは 8) より大きい場合、リンク リストは赤黒ツリーに変換されます。検索を高速化します。2. HashMap 属性
//HashMap のデフォルトの初期容量は 2^4=16static Final int DEFAULT_INITIAL_CAPACITY = 1 19d5aec526c24470dee7b80f3ae16a68>> は符号ビットを無視するビット右シフト記号です |= は & 演算です左と右の数値
このメソッドは、渡した初期化容量を 2 の 2 乗の数値に変換します。そのため、HashMap の容量は の累乗でなければならないことがここで固定されています。 2の2乗なぜ2の2乗の数値なのかというと、理由は以下の通りです。 1.putメソッドのソースコード:final V putVal(int hash, K key, V value, boolean onlyIfAbsent, boolean evict) { Node<K,V>[] tab; Node<K,V> p; int n, i; if ((tab = table) == null || (n = tab.length) == 0) n = (tab = resize()).length; if ((p = tab[i = (n - 1) & hash]) == null) tab[i] = newNode(hash, key, value, null); else { Node<K,V> e; K k; if (p.hash == hash && ((k = p.key) == key || (key != null && key.equals(k)))) e = p; else if (p instanceof TreeNode) e = ((TreeNode<K,V>)p).putTreeVal(this, tab, hash, key, value); else { for (int binCount = 0; ; ++binCount) { if ((e = p.next) == null) { p.next = newNode(hash, key, value, null); if (binCount >= TREEIFY_THRESHOLD - 1) // -1 for 1st treeifyBin(tab, hash); break; } if (e.hash == hash && ((k = e.key) == key || (key != null && key.equals(k)))) break; p = e; } } if (e != null) { // existing mapping for key V oldValue = e.value; if (!onlyIfAbsent || oldValue == null) e.value = value; afterNodeAccess(e); return oldValue; } } ++modCount; if (++size > threshold) resize(); afterNodeInsertion(evict); return null; }文を参照 p = tab[i = (n - 1) & hash]) == null (n - 1) & hash は位置まで計算されます。タブ内の位置が空の場合、挿入操作が実行されます。直接。 例として、16 のポジションがあり、4 人の学生が独自の学生番号を持っているとします。
学生 ID | |
1 | |
2 | |
3 | |
4 |
以上がJava コレクション クラス Hashmap の詳細な紹介 (コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。