ルバンアカデミーjavaオンライン学習
今日は、javaの非常に重要なマップコレクションについて説明します。
1.マップコレクションの概要
パブリックインターフェイスMap <K、V>
マップインターフェイスを最初に見ると、マップの格納された値の構造がキーと値のペアで構造化されていることがわかります。簡単に言うと、マップコレクションは、キーを値にマップするオブジェクトです。マッピングに重複を含めることはできません。キー、;各キーは1つの値にのみマップできます。
2.ストレージ構造をマップします
上図に示すように、マップにデータを格納する方法は、キーが値の値に対応し、キーの値をnullにすることができますが、キーの値を繰り返すことができないため、キーがnullの場合は、1回だけ発生し、値の値は実行されません。要件、繰り返しまたは複数のnullにすることができ、キーと値のペアのペアが下部のエントリ配列に配置されます。
クエリを実行すると、キー値のハッシュコード値に基づいて値に対応する場所が検索されます。同じキーの値が複数回割り当てられている場合、後で割り当てられた値が前に割り当てられた値を上書きします。
3.マップのいくつかの特性を要約します
Mapコレクションは2列のコレクションであり、1つの要素には2つの値(キーと値)が含まれています。
Mapコレクションの要素、キー、および値のデータタイプは、同じでも異なっていてもかまいません。
Mapコレクション内の要素の場合、キーを繰り返すことはできず、値を繰り返すことができます。
Mapコレクションの要素は、キーと値が1対1で対応しています。
4.マップの実装クラス
説明するために、より一般的に使用される実装クラスをいくつか示します。
4.1 HashMap
これは私たちがより日常的に使用する実装クラスです。その基礎となる実装は配列+リンクリストであり、キーと値の両方の値をnullにすることができます。初期メモリサイズは16で、一般的なストレージ要素は半分のサイズに達すると拡張されます。スレッドは安全ではありませんが、効率が高いという利点があります。HashMapは同期をサポートしていません。つまり、複数のスレッドを同時に書き込むと、データの不整合が発生する可能性があります。同期をサポートする必要がある場合は、コレクションのsynchronizedmapメソッドを使用できます。
4.2ハッシュテーブル
その基礎となる実装は配列+リンクリストであり、キーと値はnullを格納できません。ほとんどの操作がロックされているため、Hashtableは同期操作をサポートしますが、これこそがHashtableの書き込み速度につながります低速。データセキュリティレベルが高い場合に使用されます。
4.3 ConcurrentHashMap
その基礎となる実装は、セグメント化された配列+リンクリストです。Hashtableの同期は、Hashテーブル全体に対して、つまり、スレッドが独占できるようにテーブル全体がロックされるたびに行われます。ConcurrentHashMapを使用すると、複数の変更操作を同時に実行できます。重要なのは、ロック分離を使用することです。このテクノロジーは、マップ全体をNセグメントに分割することで同じスレッドの安全性を提供できますが、効率はN倍になり、デフォルトは16倍になります。
4.4linkedHashMap
LinkedHashMapは、HashMapとLinkedListの組み合わせと見なすことができます。つまり、HashMapを使用してデータ構造を操作し、LinkedListを使用して要素の挿入順序を維持します。内部で二重リンクリストを維持します。LinkedHashMapはHashMapのサブクラスであり、要素は挿入順に配置されます。移動速度は遅くなります。
4.5ツリーマップ
赤黒ツリーに基づくNavigableMapの実装。マップは、キーの自然な順序に従って並べ替えられるか、マップの作成時に提供されるComparatorに従って並べ替えられます。これは、使用する構築方法によって異なります。利点は、キー値を並べ替えることができ、一意であり、値が順序付けられて繰り返し可能であり、基礎となるデータ構造がバランスの取れたバイナリツリーであるということです。
5.マップインターフェイスの一般的なメソッド
public V put(K key、V value):指定されたキーと指定された値をMapコレクションに追加します。
public V remove(Object key):指定されたキーに対応するキーと値のペア要素をMapコレクションから削除し、削除された要素の値を返します。
public V get(Object key):指定されたキーに従って、Mapコレクション内の対応する値を取得します。
boolean containsKey(Object key):セットに指定されたキーが含まれているかどうかを判別します。
public SetkeySet():Mapコレクション内のすべてのキーを取得し、Setコレクションに保存します。
public SetkeySet():Mapコレクション内のすべてのキーを取得し、Setコレクションに保存します。
6、マップトラバーサル
いくつかのマップコレクションをトラバースするいくつかの方法があります
6.1エントリを使用した実装
forループのエントリを使用してマップトラバーサルを実装します
Map<String,String> map = new HashMap<>();
map.put("大白", "白色");
map.put("柯基", "黄色");
for(Map.Entry<String, String> entry : map.entrySet()){
String mapKey = entry.getKey();
String mapValue = entry.getValue();
System.out.println(mapKey+":"+mapValue);
}
動作結果:
6.2入力を通じてキーまたは値を取得する
forループ内のキーまたは値を反復処理することは、通常、マップ内のキーまたは値のみが必要な場合に使用するのに適しており、entrySetを使用するよりもパフォーマンスが優れています。
Map<String,String> map = new HashMap<>();
map.put("大白", "白色");
map.put("柯基", "黄色");
//key
for(String key : map.keySet()){
System.out.println(key);
}
//value
for(String value : map.values()){
System.out.println(value);
}
動作結果:
6.3イテレーターをトラバースする
Map<String,String> map = new HashMap<>();
map.put("大白", "白色");
map.put("柯基", "黄色");
Iterator<Entry<String, String>> entries = map.entrySet().iterator();
while(entries.hasNext()){
Entry<String, String> entry = entries.next();
String key = entry.getKey();
String value = entry.getValue();
System.out.println(key+":"+value);
}
動作結果:
6.4キーファインディングによるトラバーサル
キー検索の値トラバーサルでは、キーから値を取得するのに時間のかかる操作であるため、この方法の効率は比較的低くなります。
Map <String、String> map = new HashMap <>();
map.put("大白", "白色");
map.put("柯基", "黄色");
for(String key : map.keySet()){
String value = map.get(key);
System.out.println(key+":"+value);
}
動作結果:
概要
さて、上記は、マップとマップトラバーサルの4つの方法のコード実装に関するいくつかの知識の私自身の要約です。皆さんを歓迎して、ポインターを与え、学び、一緒に進歩してください、ありがとう!