ホームページ  >  記事  >  Java  >  Java コレクションの HashMap の詳細な説明

Java コレクションの HashMap の詳細な説明

黄舟
黄舟オリジナル
2017-03-13 17:42:371486ブラウズ

HashMap はハッシュ テーブルであり、格納されるコンテンツはキーと値のマッピングです。 HashMap は AbstractMap を継承し、Map、Cloneable、および Serializable インターフェイスを実装します。

(1) HashMap はスレッドセーフではなく、キーと値は null になる可能性があり、順序付けされていません。

(2) HashMap の初期サイズは 16、最大サイズは 2 の 30 乗、デフォルトの負荷率は 0.75 です。

(3) 初期容量は、作成時のハッシュ テーブルの容量にすぎず、負荷率は、容量が自動的に増加する前にハッシュ テーブルがどの程度満たされるかを示す尺度です。ハッシュ テーブルのエントリ数が負荷率と現在の容量の積を超える場合、ハッシュ テーブルを再ハッシュする (内部データ構造を再構築する) 必要があります


HashMap と Map の関係は次のとおりです。


(1) HashMap は AbstractMap クラスを継承し、Map インターフェースを実装します。

(2) HashMap は、Zipper メソッドを通じてハッシュ テーブルを実装します。いくつかの重要なメンバー変数は、table、size、threshold、loadFactor、modCount です。

table は Entry[] 配列型で、実際には HashMap の Key-Value がこの配列に格納されます。

size は HashMap のサイズで、HashMap によって保存されるキーと値のペアの数です。

threshold は、HashMap の容量を調整する必要があるかどうかを判断するために使用される、HashMap に格納されているデータがしきい値に達したときの容量に負荷係数を乗算した値と同じです。 HashMap を 2 倍にする必要があります。

loadFactor 負荷係数

modCount は、フェイルファスト メカニズムを実装するために使用されます。


HashMap の走査方法:

(1) HashMap のキーと値のペアを走査する: 最初のステップは、entrySet() 関数を介してエントリ セットを取得することであり、2 番目のステップは、entrySet() 関数を介してエントリ セットを走査することです。データを取得するための Iterator イテレータ

Integer Iterator =map.entrySet().iterator()(iterator.hasNext())
 {
        Map.Entry entry=(Map.Entry)iterator.next()key=(String)enrty.getKey()value=(Integer)entry.getValue()}


(2) HashMap のキーをトラバースし、キーを介して値を取得します

=Integer =Inerator =map.keySet().iterator()(iterator.hasNext())
{
        key=(String)iterator.next()value=(Integer)map.get(key)}

(3) HashMap の値をトラバースします: 最初のステップは、値に基づいて設定された値を反復的に走査します set

=Collection =map.values()Iterator = .iterator()(iterator.hasNext())
{
    value=(Integer)iterator.next()}


よく使用される関数:


()
Object               ()
(Object key)
(Object value)
Set8817e8d4bd2291481cc1067ca69329e6>     ()
(Object key)
()
Seta8093152e673feb7aba1828c43532094               ()
(keyvalue)
(Map024902c398a6aa179f04c367da6aee33 map)
(Object key)
()
Collectiona8093152e673feb7aba1828c43532094        ()

HashMap サンプルコード:


public class Hello {

    public void testHashMapAPIs()
    {
        Random r = new Random();
        HashMap601754196720ae8e56f6948b6d2ab654 map = new HashMap();
        map.put("one", r.nextInt(10));
        map.put("two", r.nextInt(10));
        map.put("three", r.nextInt(10));
        System.out.println("map:"+map );
        Iterator iter = map.entrySet().iterator();
        while(iter.hasNext())
        {
            Map.Entry entry = (Map.Entry)iter.next();
            System.out.println("key : "+ entry.getKey() +",value:"+entry.getValue());
        }
        System.out.println("size:"+map.size());
        System.out.println("contains key two : "+map.containsKey("two"));
        System.out.println("contains key five : "+map.containsKey("five"));
        System.out.println("contains value 0 : "+map.containsValue(new Integer(0)));
        map.remove("three");
        System.out.println("map:"+map );
        map.clear();
        System.out.println((map.isEmpty()?"map is empty":"map is not empty") );
    }
    public static void main(String[] args) {
        Hello hello=new Hello();
        hello.testHashMapAPIs();
    }
}


実行結果:リー


Java8 での HashMap ソース コード分析:


map:{one=3, two=9, three=9}
key : one,value:3
key : two,value:9
key : three,value:9
size:3
contains key two : true
contains key five : false
contains value 0 : false
map:{one=3, two=9}
map is empty

以上がJava コレクションの HashMap の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。