分析のHashMapの原理
うんは、長い時間のためにとHashMapのが、唯一の最近ようやく少し理解して...単に達成するためにどのようにそこにあるものを理解していない、それを使用しています。
1.まず、我々は、HashMapのの基本的な使用について話している:データストレージおよびデータのアクセス
ストリングキー=(文字列)entry.getKey(); 文字列値=(文字列)entry.getValue();
System.out.println( "のentrySet遍历:キー=" + +キー"値=" +値)。
}
***キーセットとのentrySetのトラバーサルの比較
keySet:次により取得された()メソッドキーマップ、および次いで(キー)によってmap.getとして(のみ設定キーをマップ記憶された設定に設定されている)の値に対応する値を得ます
entrySet()メソッド次にエントリオブジェクトによって得られた、それぞれに対応する値entry.getKey()、entry.getValue()(SETキー、値を含む、項目オブジェクトを設定するように設定されている内部記憶された)を得ることができます
要約:通過するのentrySetのkeySetよりも効率的な方法は、いくつかは2のentrySetマップコレクションをトラバース方法をお勧めします。
HashMapのコード例を使用します。HashMapApp.java
パッケージcom.study.thread.juc_thread.base。 輸入java.util.HashMapを; インポートするjava.util.Iterator; 輸入java.util.Map.Entry。 パブリッククラスHashMapApp { パブリック静的無効メイン(文字列[] args){ //创建マップ のHashMap <文字列、文字列>マップ=新しいHashMapの<文字列、文字列>(); //存储数据 map.put( "名前"、 "zhangsan"); map.put( "年齢"、 "18")。 map.put( "性別"、 "男性")。 //获取数据方式1通过キーセット遍历 。イテレータイテレータ= map.keySet()反復子(); 一方、(iterator.hasNext()){ 文字列キー=(文字列)iterator.next(); 文字列値= map.get(キー)。 System.out.println( "キーセット遍历:キー=" +キー+」、 System.out.println( "--------------- ------------------トラバーサルパーティングライン"); //取得しますentrySetトラバースデータとして2 イテレータentryIterator = EnumMap.entrySet()イテレータ();. 一方(entryIterator.hasNext()){ エントリのエントリ=(エントリ)entryIterator.next(); 文字キー=(文字列)entry.getKey( ); 文字列値=(文字列)entry.getValue(); のSystem.out.println( "のentrySetトラバース:キー=" +キー+ "値=" +値); } } }
2.次に我々はHashMapの初期化を見て、オブジェクトがマップを作成することです
デフォルトの容量は次のとおりです。16
デフォルトの負荷係数:0.75
容量:即ち、マップセットの初期サイズは、次いで、膨張は、負荷率の値と、格納されたオブジェクトの数に応じて実行されます
負荷率:0.75以上の、すなわち、地図データセットの記憶容量、拡張操作が発生することが
たとえば、次の格納されたデータが12より大きい16の容量、0.75の負荷率、ハッシュ衝突が発生し、各マップのアレイは、各バケットの値の下に既にある、膨張は(元のサイズを設定なる発生します2回)
拡張は非常にリソースを消費することになるので、***、指定された容量作成したマップを推奨。 初期容量値=(オブジェクトが格納される/負荷率)+1
以下、4つのHashMapの初期化方法を提供します
/ ** 1.指定初始化容量、负载因子 * / 公共のHashMap(int型のInitialCapacityの値、loadFactorフロート){ (InitialCapacityの値が<0)場合 ( "不正な初期容量:" +新しいIllegalArgumentExceptionをスローし InitialCapacityの値を)。 (InitialCapacityの値> MAXIMUM_CAPACITY)場合 InitialCapacityの値= MAXIMUM_CAPACITY。 (loadFactor <= 0 || Float.isNaN(loadFactor))場合には 、新たな例外:IllegalArgumentException( "不正な負荷率:" +スロー loadFactor)を、 this.loadFactor = loadFactor。 this.threshold = tableSizeFor(InitialCapacityの値)。 } / ** 指定された初期容量値 * / 公共のHashMap(int型InitialCapacityの値){ この(InitialCapacityの値、DEFAULT_LOAD_FACTOR); } / ** 引数なしのコンストラクタ * / 公共のHashMap(){ this.loadFactor = DEFAULT_LOAD_FACTOR; //すべてのフィールドOTHERデフォールト } / ** 指定されたマップ * / パブリックハッシュマップ(マップM <K延び、延びV ??>){ this.loadFactor = DEFAULT_LOAD_FACTOR; putMapEntries(falseにM、); }
3.その後、我々は、我々は(競合を解決する方法をハッシュ)のHashMapのデータ構造を理解する必要があるデータを格納する方法のHashMapを見てください。
+配列リスト、赤黒木ハッシュコード方法....
更新する....
4.最後に、我々は、HashMapのデータを取得する方法を見て。