Java でマップを反復する方法

一般的にはあります を反復する方法 地図 ジャワでは。この記事では、それらすべてについて説明し、それぞれの長所と短所についても見ていきます。
まず第一に、私たちは できない を使用してマップを直接反復します イテレータ 、マップはそうではないので、 コレクション。 また、先に進む前に、次のことについて少し知っておく必要があります。 マップ.エントリ インターフェース。
Java のすべてのマップは実装されているため、 地図 インターフェイスでは、次のテクニックはあらゆるマップ実装 ( HashMap 、 TreeMap 、 LinkedHashMap 、 Hashtable など) で機能します。

1. For-Each ループを使用して Map.entrySet() を反復します。
Map.entrySet() メソッドはコレクションビュー( セット ) このマップに含まれるマッピング。したがって、次を使用してキーと値のペアを反復できます。 getKey() そして getValue() の方法 マップ.エントリ 。この方法は最も一般的であり、ループ内でマップ キーと値の両方が必要な場合に使用する必要があります。以下はそれを示す Java プログラムです。

ジャワ




// Java program to demonstrate iteration over> // Map.entrySet() entries using for-each loop> > import> java.util.Map;> import> java.util.HashMap;> > class> IterationDemo> {> > public> static> void> main(String[] arg)> > {> > Map gfg => new> HashMap();> > > // enter name/url pair> > gfg.put(> 'GFG'> ,> 'techcodeview.com'> );> > gfg.put(> 'Practice'> ,> 'practice .techcodeview.com> );> > gfg.put(> 'Code'> ,> 'code .techcodeview.com> );> > gfg.put(> 'Quiz'> ,> 'www .techcodeview.com> );> > > // using for-each loop for iteration over Map.entrySet()> > for> (Map.Entry entry : gfg.entrySet())> > System.out.println(> 'Key = '> + entry.getKey() +> > ', Value = '> + entry.getValue());> > }> }>

出力:

Key = Quiz, Value = www.techcodeview.com Key = Practice, Value = practice.techcodeview.com Key = GFG, Value = techcodeview.com Key = Code, Value = code.techcodeview.com 

2. keySet() メソッドと value() メソッドを使用したキーまたは値の反復処理
Map.keySet() メソッドは、このマップに含まれるキーの Set ビューを返します。 Map.values() メソッドは、このマップに含まれる値のコレクション ビューを返します。したがって、マップのキーまたは値のみが必要な場合は、for-each ループを使用して keySet または値を反復処理できます。以下はそれを示す Java プログラムです。

ジャワ




// Java program to demonstrate iteration over> // Map using keySet() and values() methods> > import> java.util.Map;> import> java.util.HashMap;> > class> IterationDemo> {> > public> static> void> main(String[] arg)> > {> > Map gfg => new> HashMap();> > > // enter name/url pair> > gfg.put(> 'GFG'> ,> 'techcodeview.com'> );> > gfg.put(> 'Practice'> ,> 'practice .techcodeview.com> );> > gfg.put(> 'Code'> ,> 'code .techcodeview.com> );> > gfg.put(> 'Quiz'> ,> 'www .techcodeview.com> );> > > // using keySet() for iteration over keys> > for> (String name : gfg.keySet())> > System.out.println(> 'key: '> + name);> > > // using values() for iteration over values> > for> (String url : gfg.values())> > System.out.println(> 'value: '> + url);> > }> }>

出力:

key: Quiz key: Practice key: GFG key: Code value: www.techcodeview.com value: practice.techcodeview.com value: techcodeview.com value: code.techcodeview.com 

3. イテレータを使用した反復処理 マップ.エントリ
この方法は最初の方法と多少似ています。最初の方法では Map.Entry に対して for-each ループを使用しますが、ここでは イテレータ 。 Map.Entry 上でイテレータを使用することには、それ自体の利点があります。を呼び出すことで、反復中にマップからエントリを削除できます。 iterator.remove() 方法。

ジャワ




// Java program to demonstrate iteration over> // Map using keySet() and values() methods> > import> java.util.Map;> import> java.util.HashMap;> import> java.util.Iterator;> > class> IterationDemo> {> > public> static> void> main(String[] arg)> > {> > Map gfg => new> HashMap();> > > // enter name/url pair> > gfg.put(> 'GFG'> ,> 'techcodeview.com'> );> > gfg.put(> 'Practice'> ,> 'practice .techcodeview.com> );> > gfg.put(> 'Code'> ,> 'code .techcodeview.com> );> > gfg.put(> 'Quiz'> ,> 'www .techcodeview.com> );> > > // using iterators> > Iterator itr = gfg.entrySet().iterator();> > > while> (itr.hasNext())> > {> > Map.Entry entry = itr.next();> > System.out.println(> 'Key = '> + entry.getKey() +> > ', Value = '> + entry.getValue());> > }> > }> }>

出力:

Key = Quiz, Value = www.techcodeview.com Key = Practice, Value = practice.techcodeview.com Key = GFG, Value = techcodeview.com Key = Code, Value = code.techcodeview.com 

4. forEach(action) メソッドの使用:
Java 8 では、次を使用してマップを反復できます。 Map.forEach(アクション) 方法と使い方 ラムダ式 。このテクニックはクリーンで高速です。

ジャワ




// Java code illustrating iteration> // over map using forEach(action) method> > import> java.util.Map;> import> java.util.HashMap;> > class> IterationDemo> {> > public> static> void> main(String[] arg)> > {> > Map gfg => new> HashMap();> > > // enter name/url pair> > gfg.put(> 'GFG'> ,> 'techcodeview.com'> );> > gfg.put(> 'Practice'> ,> 'practice .techcodeview.com> );> > gfg.put(> 'Code'> ,> 'code .techcodeview.com> );> > gfg.put(> 'Quiz'> ,> 'www .techcodeview.com> );> > > // forEach(action) method to iterate map> > gfg.forEach((k,v) ->System.out.println(> 'Key = '> > + k +> ', Value = '> + v));> > > }> }>

出力:

Key = Quiz, Value = www.techcodeview.com Key = Practice, Value = practice.techcodeview.com Key = GFG, Value = techcodeview.com Key = Code, Value = code.techcodeview.com 

5. キーの反復処理と値の検索 (非効率)
ここではまずキーをループします(使用 Map.keySet() メソッド) を使用して値を検索します。 Map.get(キー) このメソッドは、キーによる値の取得に時間がかかる可能性があるため、非常に遅く非効率的であるため、実際には使用されません。

ジャワ




// Java program to demonstrate iteration> // over keys and searching for values> > import> java.util.Map;> import> java.util.HashMap;> > class> IterationDemo> {> > public> static> void> main(String[] arg)> > {> > Map gfg => new> HashMap();> > > // enter name/url pair> > gfg.put(> 'GFG'> ,> 'techcodeview.com'> );> > gfg.put(> 'Practice'> ,> 'practice .techcodeview.com> );> > gfg.put(> 'Code'> ,> 'code .techcodeview.com> );> > gfg.put(> 'Quiz'> ,> 'www .techcodeview.com> );> > > // looping over keys> > for> (String name : gfg.keySet())> > {> > // search for value> > String url = gfg.get(name);> > System.out.println(> 'Key = '> + name +> ', Value = '> + url);> > }> > }> }>

出力:

Key = Quiz, Value = www.techcodeview.com Key = Practice, Value = practice.techcodeview.com Key = GFG, Value = techcodeview.com Key = Code, Value = code.techcodeview.com 

参考文献: スタックオーバーフロー