構造Map実装クラス
マップ:データの複列、キーと値のペアに格納されたデータ
HashMapの:;スレッドセーフ、高効率、主な成果としてクラスの地図ヌルとキー値を格納することができます
基となるHashMap:
配列リスト+ - >前JDK7
+ +赤黒木リスト配列- > jdk8
AのLinkedHashMap:map要素を横断しながら、保証、トラバーサルは理由を追加するために(達成することができる:頻繁トラバーサル操作へのHashMapの底部上の元の構造、ポインタのペアを追加して、前部要素及び後部ポインティングを、そのような効率)HashMapのより高いです
TreeMapの:ソートトラバーサルを達成するために、並べ替えの追加キー値に応じて保証。このとき、キーまたは自然順序付けカスタム順序を考慮し、基礎となる赤黒木を使用して
ハッシュテーブル:古い実装クラスとして:スレッド・セーフで、低効率がキーとnull値を格納することはできません
プロパティ:コンフィギュレーションファイルを処理するために使用。キーと値はString型であります
キー地図:無秩序、またとない、すべてのキーのSetストアを使用する- >あなたがイコールとhashCode()をオーバーライドしたいクラスのキー(例えばHashMapのへ)
値のマップ:値がコレクション(等しいストレージを書き換えるために使用乱れ、再現性、すべての付加価値>クラス)
キーと値のペア:キーと値のエントリオブジェクトを構成します
エントリのマップ、無秩序またとない、セット格納し、すべてのエントリを使用します。
キーと値を通過するには、2つの方法
方法1:
Set entrySet = map.entrySet();
Iterator iterator1 = entrySet.iterator();
while(iterator1.hasNext()){
Object obj = iterator1.next();
//entrySet集合中的元素都是entry
Map.Entry entry = (Map.Entry) obj;
//entry.getKey(),entry.getValue()
}
第二の方法:
Set entrySet = map.entrySet();
Iterator iterator1 = entrySet.iterator();
while(iterator1.hasNext()){
Object key = iterator1.next();
Object value = map.get(key);
}
HashMap map = new HashMap();
在实例化以后,底层创建了长度是16的一维数组Entry[] table
... 可能已经执行过多次put ...
map.put(key1, value1);
()KEY1エントリアレイ内の記憶場所を得るために計算アルゴリズム後の後ハッシュ値、ハッシュ値を算出したハッシュコードクラスKEY1を呼び出すまず、。
この位置からのデータが空ならば、この場合にはKEY1、値1が正常に追加されました。-----> 1.
この位置からのデータが空でない場合、(この一つ以上のデータ(リンクされたリストの形で存在する)が存在することを位置手段)は、既存のデータを比較すること、および1つまたは複数のKEY1ハッシュ値:
ハッシュ値キー1既存のデータとハッシュ値が同じでない場合は、KEY1-VALUE1の成功を追加します。---->ケース2つ
の同一のハッシュ値と特定のデータ(KEY2 -value2)既存のKEY1のハッシュ値と、比較が続け:KEY1に等しいクラス(KEY2)を呼び出します。
イコール()がfalseを返す場合:現時点では、成功したKEY1-をvalue1を追加----> 3
のequals()がtrueを返した場合:代替VALUE1値2を使用します
状況に2及び3:ケースKEY1-value1とオリジナルデータがリンクされたリストに格納されます。
展開の一定のプロセスに追加しきい値を超えている(と位置が空ではありません保存する)際に、問題を伴います、拡張。拡張のデフォルトモード:元の配列の上に2回の元の容量に拡張、およびコピー
1、newHashMap():底部層は、長さ16の配列を作成しません
図2に示すように、アレイのjdk8底がある:むしろエントリよりもノード[]、[]
図3は、最初のコールは、長さ16の基礎となる配列を作成する()メソッドを置きます
4、JDK7下部のみ:+配列リスト。jdk8基本構造:+ +黒のツリーリストアレイ
配列インデックス内の特定位置のデータ要素の数は、インデックスツリーの位置上のすべてのデータが赤黒に格納され、その時点でリスト>及びアレイ8> 64の現在の長さ、として存在する場合
DEFAULT_INITIAL_CAPACITY:デフォルトの容量は16ハッシュマップです
DEFAULT_LOAD_FACTOR:HashMapのデフォルトの負荷係数:0.75
閾値:拡張閾値=容量因子*フィル:0.75 * 16 - > 12
TREIFY_THRESHOLD:鎖長のバケットは、赤黒木に変換され、デフォルト値よりも大きい。jdk8
MIN_TREEIFY_CAPACITY浴槽の最小ハッシュテーブルの容量はノードのツリーです:64
出典:
static class Entry<K,V> extends HashMap.Node<K,V>{
Entry<K,V> before, after;//能够记录添加的元素先后顺序
Entry(int hash, K key, V value, Node<K,V> next){
super(hash, key, value, next);
}
}
継承HashMapのは、ノード上のキーを使用すると、彼はそれぞれの前と後に、2つの参照を継承して、コメントを追加ノードHashMapのエンティティです。二重リンクリストを維持するための
TreeMapのキー値に加えて、同じクラスで作成されたオブジェクトによって要求されなければならない
キーに従ってソートするよう:自然な順序、カスタムソート(値によってソートされません!)
自然順序付け:Comparableインタフェース実装され、compareToメソッドのオーバーライド
カスタムオーダー:新しいコンパレータ()内部クラス
Properties pros = new Properties();
FileInputStream fis = new FileInputStream("jdbc.properties");
pros.load(fis);//加载流对应的文件
pros.getProperty("文件中对应的值");