Javaではハッシュマップ Java 1.2 以降の Java コレクションの一部です。このクラスは次の場所にあります java.util パッケージ。 Java の Map インターフェイスの基本的な実装を提供します。 Java の HashMap はデータを (Key, Value) ペアに格納し、別のタイプ (整数など) のインデックスによってアクセスできます。 1 つのオブジェクトは、別のオブジェクト (値) へのキー (インデックス) として使用されます。 HashMap に重複キーを挿入しようとすると、対応するキーの要素が置き換えられます。
ハッシュマップとは何ですか?
Java ハッシュマップ と類似しています ハッシュ表 , しかし、非同期です。 null キーも格納できますが、null キー オブジェクトは 1 つだけである必要があり、null 値はいくつでも存在できます。このクラスはマップの順序を保証しません。このクラスとそのメソッドを使用するには、インポートする必要があります java.util.HashMap パッケージまたはそのスーパークラス。
目次
- ハッシュマップとは何ですか?
- Java ハッシュマップの例
- ハッシュマップ宣言
- Java HashMap の階層
- JavaでHashMapを作成する
- Java HashMap コンストラクター
- HashMap でさまざまな操作を実行する
- Java の HashMap の複雑さ
- HashMapの内部構造
- Java HashMap の長所と短所
Java ハッシュマップの例
以下は Java HashMap の例の実装です。
ジャワ
// Java program to illustrate HashMap class> // of java.util package> // Importing HashMap class> import> java.util.HashMap;> // Main class> public> class> GFG {> >// Main driver method> >public> static> void> main(String[] args)> >{> >// Create an empty hash map by declaring object> >// of string and integer type> >HashMap map =>new> HashMap();> >// Adding elements to the Map> >// using standard put() method> >map.put(>'vishal'>,>10>);> >map.put(>'sachin'>,>30>);> >map.put(>'vaibhav'>,>20>);> >// Print size and content of the Map> >System.out.println(>'Size of map is:- '> >+ map.size());> >// Printing elements in object of Map> >System.out.println(map);> >// Checking if a key is present and if> >// present, print value by passing> >// random element> >if> (map.containsKey(>'vishal'>)) {> >// Mapping> >Integer a = map.get(>'vishal'>);> >// Printing value for the corresponding key> >System.out.println(>'value for key'> >+>' 'vishal' is:- '> + a);> >}> >}> }> |
>
>出力
Size of map is:- 3 {vaibhav=20, vishal=10, sachin=30} value for key 'vishal' is:- 10> ハッシュマップ 宣言
public class HashMap extends AbstractMap implements Map, Cloneable, Serializable>
パラメーター:
これは次の 2 つのパラメータを取ります。
- このマップによって維持されるキーのタイプ
- マップされた値のタイプ
注:K eys と value をプリミティブ データ型にすることはできません。ハッシュマップのキーは、実装されている場合に有効です。 hashCode()およびequals()メソッド 、ハッシュコードと等価性が一定のままであるように、不変 (不変のカスタム オブジェクト) である必要もあります。ハッシュマップの値は、任意のラッパー クラス、カスタム オブジェクト、配列、任意の参照型、または null にすることができます。
例えば : ハッシュマップでは配列を値として持つことができますが、キーとして持つことはできません。
クラウド コンピューティング アプリケーション
Java の HashMap 実装 シリアル化可能 、 クローン可能 、 地図 インターフェース.Java HashMap の拡張 抽象地図 クラス。直接のサブクラスは次のとおりです。 リンクされたハッシュマップ そして プリンターの状態の理由 。
Java HashMap の階層

Java HashMap の特徴
HashMap は、キーに基づいて値を保存および取得するために使用されるデータ構造です。ハッシュマップの主な特性には次のようなものがあります。
- 高速アクセス時間 : HashMap は要素への一定時間のアクセスを提供します。これは、要素の取得と挿入が非常に高速であり、通常は O(1) の時間計算量であることを意味します。
- ハッシュ関数を使用する : HashMaps はハッシュ関数を使用して、キーを配列内のインデックスにマップします。これにより、キーに基づいて値をすばやく検索できます。
- キーと値のペアを保存します。 HashMap の各要素は、キーと値のペアで構成されます。キーは、関連付けられた値を検索するために使用されます。
- null キーと値をサポート : HashMap では null 値とキーが許可されます。これは、null キーを使用して値を保存でき、null 値をキーに関連付けることができることを意味します。
- 注文されていない: HashMap は順序付けされていません。つまり、要素がマップに追加される順序は保持されません。ただし、LinkedHashMap は、挿入順序を保持する HashMap のバリエーションです。
- 重複を許可します : HashMap では値の重複は許可されますが、キーの重複は許可されません。重複したキーが追加されると、そのキーに関連付けられた以前の値が上書きされます。
- スレッドセーフではない : HashMap はスレッドセーフではありません。つまり、複数のスレッドが同じハッシュマップに同時にアクセスすると、データの不整合が発生する可能性があります。スレッドの安全性が必要な場合は、ConcurrentHashMap を使用できます。
- 容量と負荷率 : HashMap には、保持できる要素の数である容量と、サイズ変更される前にハッシュマップがどの程度満たされるかの尺度である負荷係数があります。
JavaでHashMapを作成する
以下の例を使用して、Java で HashMap を作成する方法を理解しましょう。
ジャワ
// Java Program to Create> // HashMap in Java> import> java.util.HashMap;> // Driver Class> public> class> ExampleHashMap {> >// main function> >public> static> void> main(String[] args) {> > >// Create a HashMap> >HashMap hashMap =>new> HashMap();> > >// Add elements to the HashMap> >hashMap.put(>'John'>,>25>);> >hashMap.put(>'Jane'>,>30>);> >hashMap.put(>'Jim'>,>35>);> > >// Access elements in the HashMap> >System.out.println(hashMap.get(>'John'>));> >// Output: 25> > >// Remove an element from the HashMap> >hashMap.remove(>'Jim'>);> > >// Check if an element is present in the HashMap> >System.out.println(hashMap.containsKey(>'Jim'>));> >// Output: false> > >// Get the size of the HashMap> >System.out.println(hashMap.size());> >// Output: 2> >}> }> |
>
>出力
25 false 2>
Java HashMap コンストラクター
HashMap は 4 つのコンストラクターを提供し、それぞれのアクセス修飾子は public であり、次のとおりです。
- ハッシュマップ()
- HashMap(int 初期容量)
- HashMap(int 初期容量、浮動小数点ロードファクター)
- HashMap(マップマップ)
次に、クリーンな Java プログラムを使用して上記のコンストラクターを実装しながら、上記のコンストラクターを 1 つずつ説明します。
1.ハッシュマップ()
これは、初期容量 16、負荷係数 0.75 で HashMap のインスタンスを作成するデフォルトのコンストラクターです。
構文:
HashMap hm = new HashMap();>
例
ジャワ
// Java program to Demonstrate the HashMap() constructor> // Importing basic required classes> import> java.io.*;> import> java.util.*;> // Main class> // To add elements to HashMap> class> GFG {> >// Main driver method> >public> static> void> main(String args[])> >{> >// No need to mention the> >// Generic type twice> >HashMap hm1 =>new> HashMap();> >// Initialization of a HashMap using Generics> >HashMap hm2> >=>new> HashMap();> >// Adding elements using put method> >// Custom input elements> >hm1.put(>1>,>'one'>);> >hm1.put(>2>,>'two'>);> >hm1.put(>3>,>'three'>);> >hm2.put(>4>,>'four'>);> >hm2.put(>5>,>'five'>);> >hm2.put(>6>,>'six'>);> >// Print and display mapping of HashMap 1> >System.out.println(>'Mappings of HashMap hm1 are : '> >+ hm1);> >// Print and display mapping of HashMap 2> >System.out.println(>'Mapping of HashMap hm2 are : '> >+ hm2);> >}> }> |
>
Javaブール値
>出力
Mappings of HashMap hm1 are : {1=one, 2=two, 3=three} Mapping of HashMap hm2 are : {4=four, 5=five, 6=six}> 2. HashMap(int 初期容量)
これは、HashMap インスタンスを作成します。 規定の初期容量と負荷率 0.75。
構文:
HashMap hm = new HashMap(int initialCapacity);>
例
ジャワ
// Java program to Demonstrate> // HashMap(int initialCapacity) Constructor> // Importing basic classes> import> java.io.*;> import> java.util.*;> // Main class> // To add elements to HashMap> class> AddElementsToHashMap {> >// Main driver method> >public> static> void> main(String args[])> >{> >// No need to mention the> >// Generic type twice> >HashMap hm1 =>new> HashMap(>10>);> >// Initialization of a HashMap using Generics> >HashMap hm2> >=>new> HashMap(>2>);> >// Adding elements to object of HashMap> >// using put method> >// HashMap 1> >hm1.put(>1>,>'one'>);> >hm1.put(>2>,>'two'>);> >hm1.put(>3>,>'three'>);> >// HashMap 2> >hm2.put(>4>,>'four'>);> >hm2.put(>5>,>'five'>);> >hm2.put(>6>,>'six'>);> >// Printing elements of HashMap 1> >System.out.println(>'Mappings of HashMap hm1 are : '> >+ hm1);> >// Printing elements of HashMap 2> >System.out.println(>'Mapping of HashMap hm2 are : '> >+ hm2);> >}> }> |
>
>出力
Mappings of HashMap hm1 are : {1=one, 2=two, 3=three} Mapping of HashMap hm2 are : {4=four, 5=five, 6=six}> 3. HashMap(int 初期容量、浮動小数点ロードファクター)
指定された初期容量と指定された負荷係数で HashMap インスタンスを作成します。
構文:
HashMap hm = new HashMap(int initialCapacity, float loadFactor);>
例
ジャワ
// Java program to Demonstrate> // HashMap(int initialCapacity,float loadFactor) Constructor> // Importing basic classes> import> java.io.*;> import> java.util.*;> // Main class> // To add elements to HashMap> class> GFG {> >// Main driver method> >public> static> void> main(String args[])> >{> >// No need to mention the generic type twice> >HashMap hm1> >=>new> HashMap(>5>,>0>.75f);> >// Initialization of a HashMap using Generics> >HashMap hm2> >=>new> HashMap(>3>,>0>.5f);> >// Add Elements using put() method> >// Custom input elements> >hm1.put(>1>,>'one'>);> >hm1.put(>2>,>'two'>);> >hm1.put(>3>,>'three'>);> >hm2.put(>4>,>'four'>);> >hm2.put(>5>,>'five'>);> >hm2.put(>6>,>'six'>);> >// Print and display elements in object of hashMap 1> >System.out.println(>'Mappings of HashMap hm1 are : '> >+ hm1);> >// Print and display elements in object of hashMap 2> >System.out.println(>'Mapping of HashMap hm2 are : '> >+ hm2);> >}> }> |
>
>出力
Mappings of HashMap hm1 are : {1=one, 2=two, 3=three} Mapping of HashMap hm2 are : {4=four, 5=five, 6=six}> 4.HashMap(マップマップ)
指定されたマップと同じマッピングを持つ HashMap のインスタンスを作成します。
HashMap hm = 新しい HashMap(マップ マップ);
ジャワ
// Java program to demonstrate the> // HashMap(Map map) Constructor> import> java.io.*;> import> java.util.*;> class> AddElementsToHashMap {> >public> static> void> main(String args[])> >{> >// No need to mention the> >// Generic type twice> >Map hm1 =>new> HashMap();> >// Add Elements using put method> >hm1.put(>1>,>'one'>);> >hm1.put(>2>,>'two'>);> >hm1.put(>3>,>'three'>);> >// Initialization of a HashMap> >// using Generics> >HashMap hm2> >=>new> HashMap(hm1);> >System.out.println(>'Mappings of HashMap hm1 are : '> >+ hm1);> > >System.out.println(>'Mapping of HashMap hm2 are : '> >+ hm2);> >}> }> |
>
>出力
Mappings of HashMap hm1 are : {1=one, 2=two, 3=three} Mapping of HashMap hm2 are : {1=one, 2=two, 3=three}> HashMap でさまざまな操作を実行する
1. 要素の追加 JavaのHashMapで
マップに要素を追加するには、 置く() 方法。ただし、挿入順序はハッシュマップには保持されません。内部的には、要素ごとに個別のハッシュが生成され、効率を高めるためにこのハッシュに基づいて要素にインデックスが付けられます。
ジャワ
Cのフィボナッチ数列
// Java program to add elements> // to the HashMap> import> java.io.*;> import> java.util.*;> class> AddElementsToHashMap {> >public> static> void> main(String args[])> >{> >// No need to mention the> >// Generic type twice> >HashMap hm1 =>new> HashMap();> >// Initialization of a HashMap> >// using Generics> >HashMap hm2> >=>new> HashMap();> >// Add Elements using put method> >hm1.put(>1>,>'Geeks'>);> >hm1.put(>2>,>'For'>);> >hm1.put(>3>,>'Geeks'>);> >hm2.put(>1>,>'Geeks'>);> >hm2.put(>2>,>'For'>);> >hm2.put(>3>,>'Geeks'>);> >System.out.println(>'Mappings of HashMap hm1 are : '> >+ hm1);> >System.out.println(>'Mapping of HashMap hm2 are : '> >+ hm2);> >}> }> |
>
>出力
Mappings of HashMap hm1 are : {1=Geeks, 2=For, 3=Geeks} Mapping of HashMap hm2 are : {1=Geeks, 2=For, 3=Geeks}> 2. Java での HashMap の要素の変更
要素を追加した後、要素を変更したい場合は、次のコマンドを使用して要素を再度追加することで変更できます。 置く() 方法。マップ内の要素はキーを使用してインデックス付けされるため、変更したいキーの更新された値を挿入するだけでキーの値を変更できます。
ジャワ
// Java program to change> // elements of HashMap> import> java.io.*;> import> java.util.*;> class> ChangeElementsOfHashMap {> >public> static> void> main(String args[])> >{> >// Initialization of a HashMap> >HashMap hm> >=>new> HashMap();> >// Change Value using put method> >hm.put(>1>,>'Geeks'>);> >hm.put(>2>,>'Geeks'>);> >hm.put(>3>,>'Geeks'>);> >System.out.println(>'Initial Map '> + hm);> >hm.put(>2>,>'For'>);> >System.out.println(>'Updated Map '> + hm);> >}> }> |
>
>出力
Initial Map {1=Geeks, 2=Geeks, 3=Geeks} Updated Map {1=Geeks, 2=For, 3=Geeks}> 3. Java HashMap からの要素の削除
マップから要素を削除するには、 取り除く() 方法。このメソッドはキー値を取得し、マップ内にキーが存在する場合はこのマップからキーのマッピングを削除します。
ジャワ
// Java program to remove> // elements from HashMap> import> java.io.*;> import> java.util.*;> class> RemoveElementsOfHashMap{> >public> static> void> main(String args[])> >{> >// Initialization of a HashMap> >Map hm> >=>new> HashMap();> >// Add elements using put method> >hm.put(>1>,>'Geeks'>);> >hm.put(>2>,>'For'>);> >hm.put(>3>,>'Geeks'>);> >hm.put(>4>,>'For'>);> >// Initial HashMap> >System.out.println(>'Mappings of HashMap are : '> >+ hm);> >// remove element with a key> >// using remove method> >hm.remove(>4>);> >// Final HashMap> >System.out.println(>'Mappings after removal are : '> >+ hm);> >}> }> |
>
>出力
Mappings of HashMap are : {1=Geeks, 2=For, 3=Geeks, 4=For} Mappings after removal are : {1=Geeks, 2=For, 3=Geeks}> 4. Java HashMap の走査
Iterator インターフェイスを使用して、コレクション フレームワークのあらゆる構造を横断できます。イテレーターは 1 つのタイプのデータを処理するため、Entry を使用して 2 つの別々のタイプを互換性のある形式に解決します。次に、 next() メソッドを使用して、HashMap のエントリを出力します。
ジャワ
// Java program to traversal a> // Java.util.HashMap> import> java.util.HashMap;> import> java.util.Map;> public> class> TraversalTheHashMap {> >public> static> void> main(String[] args)> >{> >// initialize a HashMap> >HashMap map =>new> HashMap();> >// Add elements using put method> >map.put(>'vishal'>,>10>);> >map.put(>'sachin'>,>30>);> >map.put(>'vaibhav'>,>20>);> >// Iterate the map using> >// for-each loop> >for> (Map.Entry e : map.entrySet())> >System.out.println(>'Key: '> + e.getKey()> >+>' Value: '> + e.getValue());> >}> }> |
>
>出力
Key: vaibhav Value: 20 Key: vishal Value: 10 Key: sachin Value: 30>
Java の HashMap の複雑さ
HashMap は、ハッシュ関数が適切に記述されており、要素がバケット間で適切に分散されている場合、基本的な操作 (get と put) に対して一定時間の複雑さを提供します。 HashMap の反復は、HashMap の容量とキーと値のペアの数によって異なります。基本的には、容量 + サイズに正比例します。容量は、HashMap 内のバケットの数です。したがって、最初から HashMap に多数のバケットを保持することは得策ではありません。
すべて大文字のショートカット Excel
| メソッド | 時間計算量 | 空間の複雑さ |
|---|---|---|
| HashMap への要素の追加 | ○(1) | の上) |
| HashMap からの要素の削除 | ○(1) | の上) |
| Javaから要素を抽出する | ○(1) | の上) |
HashMap の重要な機能
値にアクセスするには、そのキーを知っている必要があります。 HashMap は、ハッシュと呼ばれる技術を使用しているため、HashMap として知られています。 ハッシュ化 大きな文字列を、同じ文字列を表す小さな文字列に変換する手法です。値を短くすると、インデックス作成と検索の高速化に役立ちます。 ハッシュセット 内部でも HashMap を使用します。
HashMap の重要な機能は次のとおりです。
- HashMap は java.util パッケージの一部です。
- HashMap は、Map インターフェイスの不完全な実装も提供する抽象クラス AbstractMap を拡張します。
- また、 クローン可能 そして シリアル化可能 インターフェース。上記の定義の K と V は、それぞれキーと値を表します。
- HashMap では重複キーは許可されませんが、重複値は許可されます。つまり、1 つのキーに複数の値を含めることはできませんが、複数のキーに 1 つの値を含めることはできます。
- HashMap では、null キーも許可されますが、null 値は 1 つだけ許可されます。
- このクラスはマップの順序を保証しません。特に、順序が長期間にわたって一定であることは保証されません。これは HashTable とほぼ似ていますが、非同期です。
HashMapの内部構造
内部的に HashMap には Node の配列が含まれており、ノードは 4 つのフィールドを含むクラスとして表されます。
- 整数ハッシュ
- Kキー
- V値
- 次のノード
ノードに独自のオブジェクトへの参照が含まれていることがわかります。つまり、リンクされたリストです。
ハッシュマップ:
ログ4j

ノード:

ハッシュマップのパフォーマンス
HashMap のパフォーマンスは、次のような名前の 2 つのパラメータに依存します。
- 初期容量
- 負荷率
1. 初期容量 – これは、HashMap の作成時の容量です (HashMap がインスタンス化されるときに HashMap が保持できるバケットの数です)。 Java では、最初は 2^4=16 で、16 個のキーと値のペアを保持できることを意味します。
2. 負荷率 – これは、ハッシュマップの容量が増加される後の容量のパーセント値です (再ハッシュが行われるまでのバケットの充填率です)。 Java では、デフォルトで 0.75f です。これは、容量の 75% を埋めた後に再ハッシュが行われることを意味します。
3. しきい値 – 負荷率と初期容量の積です。 Java では、デフォルトでは (16 * 0.75 = 12) です。つまり、再ハッシュは、12 個のキーと値のペアを HashMap に挿入した後に行われます。
4. 焼き直し – これは、HashMap がしきい値に達した後にその容量を 2 倍にするプロセスです。 Java では、HashMap は (デフォルトで) 2^4、2^5、2^6、2^7 という順序で再ハッシュを続けます。すぐ。
初期容量が高く保たれている場合、再ハッシュは行われません。ただし、それを高く保つと、反復の時間の複雑さが増加します。したがって、パフォーマンスを向上させるには、非常に賢く選択する必要があります。初期容量を設定するには、予想される値の数を考慮する必要があります。最も一般的に推奨される負荷率の値は 0.75 で、これにより時間コストとスペース コストの間で十分なバランスが得られます。負荷率の値は 0 ~ 1 の間で変化します。
注記: Java 8 以降、Java はチェーン用のリンク リストの代わりにセルフ バランシング BST を使用し始めました。自己バランシング bst の利点は、最悪の場合 (すべてのキーが同じスロットにマップされる場合) の検索時間が O(Log n) になることです。
同期されたハッシュマップ
HashMap は非同期であると言われているため、複数のスレッドが同時にアクセスできます。複数のスレッドがこのクラスに同時にアクセスし、少なくとも 1 つのスレッドが構造的にこのクラスを操作する場合は、クラスを外部で同期させる必要があります。これは、マップをカプセル化するオブジェクトを同期することによって行われます。そのようなオブジェクトが存在しない場合は、Collections.synchronizedMap() をラップして HashMap を同期させ、偶発的な非同期アクセスを回避できます。次の例のように:
Map m = Collections.synchronizedMap(new HashMap(...));>
これでマップ m が同期されました。このクラスのイテレータは、イテレータの作成後にイテレータの削除メソッド以外の方法で構造変更が行われた場合、フェイルファストになります。イテレータが失敗すると、ConcurrentModificationException がスローされます。
ハッシュマップのアプリケーション:
HashMap は主にハッシュの実装です。これは、検索、挿入、削除の操作を効率的に実装する必要がある場合に役立ちます。を参照してください。 ハッシュの応用 詳細については。
HashMapassociate のメソッド
- K – マップ内のキーのタイプ。
- で – マップ内にマッピングされる値のタイプ。
| 方法 | 説明 |
|---|---|
| クリア() | このマップからすべてのマッピングを削除します。 |
| クローン() | この HashMap インスタンスの浅いコピーを返します。キーと値自体は複製されません。 |
| compute(K キー、BiFunction ?スーパーV、? V> remappingFunction を拡張) | 指定されたキーとその現在のマップ値 (または、現在のマッピングがない場合は null) のマッピングの計算を試みます。 |
| computeIfAbsent(K キー, 関数 スーパーK? V> マッピング関数を拡張) | 指定されたキーがまだ値に関連付けられていない (または null にマップされている) 場合は、指定されたマッピング関数を使用してその値を計算し、null でない限りその値をこのマップに入力します。 |
| computeIfPresent(K キー, BiFunction ?スーパーV、? V> remappingFunction を拡張) | 指定されたキーの値が存在し、null でない場合は、キーとその現在マップされている値を指定して新しいマッピングを計算しようとします。 |
| containsKey(オブジェクトキー) | このマップに指定されたキーのマッピングが含まれている場合は true を返します。 |
| containsValue(オブジェクト値) | このマップが 1 つ以上のキーを指定された値にマップする場合は true を返します。 |
| エントリーセット() | このマップに含まれるマッピングの Set ビューを返します。 |
| get(オブジェクトキー) | 指定されたキーがマップされている値を返します。このマップにキーのマッピングが含まれていない場合は null を返します。 |
| isEmpty() | このマップにキーと値のマッピングが含まれていない場合は true を返します。 |
| キーセット() | このマップに含まれるキーの Set ビューを返します。 |
| merge(K キー、V 値、BiFunction ?スーパーV、? V> remappingFunction を拡張) | 指定されたキーがまだ値に関連付けられていない場合、または null に関連付けられている場合は、指定された非 null 値に関連付けます。 |
| put(Kキー、V値) | 指定された値をこのマップ内の指定されたキーに関連付けます。 |
| putAll(マップ m) | 指定されたマップからこのマップにすべてのマッピングをコピーします。 |
| 削除(オブジェクトキー) | 指定されたキーのマッピングが存在する場合は、このマップからマッピングを削除します。 |
| サイズ() | このマップ内のキーと値のマッピングの数を返します。 |
| 値() | このマップに含まれる値のコレクション ビューを返します。 |
クラス java.util.AbstractMap から継承されたメソッド
| 方法 | 説明 |
|---|---|
| 等しい() | 指定されたオブジェクトとこのマップが等しいかどうかを比較します。 |
| ハッシュコード() | このマップのハッシュ コード値を返します。 |
| toString() | このマップの文字列表現を返します。 |
インタフェース java.util.Map から継承されたメソッド
| 方法 | 説明 |
|---|---|
| 等しい() | 指定されたオブジェクトとこのマップが等しいかどうかを比較します。 |
| forEach(BiConsumer アクション) | すべてのエントリが処理されるか、アクションで例外がスローされるまで、このマップ内の各エントリに対して指定されたアクションを実行します。 |
| getOrDefault(オブジェクトキー, VdefaultValue) | 指定されたキーがマップされている値を返します。このマップにキーのマッピングが含まれていない場合は、defaultValue を返します。 |
| ハッシュコード() | このマップのハッシュ コード値を返します。 |
| putIfAbsent(K キー、V 値) | 指定されたキーがまだ値に関連付けられていない (または null にマップされている) 場合は、そのキーを指定された値に関連付けて null を返し、それ以外の場合は現在の値を返します。 |
| 削除(オブジェクトキー, オブジェクト値) | 指定されたキーが現在指定された値にマップされている場合にのみ、指定されたキーのエントリを削除します。 |
| replace(Kキー、V値) | 指定されたキーが現在何らかの値にマップされている場合にのみ、そのキーのエントリを置き換えます。 |
| replace(K キー, V oldValue, V newValue) | 現在指定された値にマップされている場合にのみ、指定されたキーのエントリを置き換えます。 |
| replaceAll(BiFunction 関数) | すべてのエントリが処理されるか、関数が例外をスローするまで、各エントリの値をそのエントリに対して指定された関数を呼び出した結果に置き換えます。 |
Java HashMap の利点
- 高速検索: HashMap は要素への一定時間のアクセスを提供します。これは、要素の取得と挿入が非常に高速であることを意味します。
- 効率的な保管 : HashMap はハッシュ関数を使用して、キーを配列内のインデックスにマップします。これにより、キーに基づいた値の素早い検索と、データの効率的な保存が可能になります。
- 柔軟性 : HashMap では null キーと値が許可され、あらゆるデータ型のキーと値のペアを格納できます。
- 使いやすい : HashMap はシンプルなインターフェイスを備えており、Java で簡単に実装できます。
- 大規模なデータセットに適しています : HashMap は速度を落とすことなく大規模なデータセットを処理できます。
Java HashMap の欠点
- 順序なし : HashMap は順序付けされていません。つまり、要素がマップに追加される順序は保持されません。
- スレッドセーフではない : HashMap はスレッドセーフではありません。つまり、複数のスレッドが同じハッシュマップに同時にアクセスすると、データの不整合が発生する可能性があります。
- パフォーマンスが低下する可能性がある 注: 場合によっては、ハッシュ関数が適切に実装されていない場合、または負荷率が高すぎる場合、HashMap のパフォーマンスが低下する可能性があります。
- 配列やリストよりも複雑 : HashMap は、特に初心者にとって、単純な配列やリストよりも理解して使用するのが複雑な場合があります。
- メモリ使用量の増加 : HashMap は基礎となる配列を使用するため、配列やリストなどの他のデータ構造よりも多くのメモリを使用する可能性があります。メモリ使用量が懸念される場合、これは欠点となる可能性があります。
また、読んでください
- ハッシュマップとツリーマップ
- ハッシュマップとハッシュテーブル
- Java HashMap に関する最近の記事
Java HashMap に関する FAQ
1. Java の HashMap とは何ですか?
Java の HashMap は、キーと値のペアを内部に格納できるコレクション フレームワークのクラスです。
2. Java で HashMap を使用する理由は何ですか?
Java の HashMap は、各キーが一意であるキーと値のペアを格納するために使用されます。
3. HashMap の利点は何ですか?
HashMap は次のような機能を提供するために使用されます。
- 高速検索
- 効率的な保管
- 柔軟に使用可能
- 使いやすい
- 大規模なデータセットに適しています