【Java】Mapを使ってループさせる5つの方法

一般に、JavaでMapをループさせる方法は5つあります。
今回は、それらすべてについて説明し、それらの長所と短所についても説明します。
まず、Mapはコレクションではないため、イテレータを使用してMapを直接、反復処理することはできません。
また、先に進む前に、Map.Entry インターフェースについて少し知っておく必要があります。
JavaのすべてのマップはMapインターフェースを実装しているため、手法は
すべてのマップ実装(HashMap、TreeMap、LinkedHashMap、Hashtableなど)で機能します。

ループさせる方法

For-Eachを使用(Map.entrySet())

Map.entrySet()メソッドは、このマップに含まれるマッピングの
collection-view(Set>)を返します。
したがって、Map.Entry のgetKey()およびgetValue()メソッドを使用して、
キーと値のペアを反復処理できます。
このメソッドは最も一般的であり、ループでマップキーと値の両方が
必要な場合に使用する必要があります。

keySet()メソッドとvalues()メソッドを使用

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

Map.Entryでイテレーターを使用

このメソッドは、For-Eachと多少似ています。
For-Eachでは、Map.Entry に対してFor-eachループを使用していますが、
ここではイテレータを使用しています。
Map.Entry でイテレータを使用することにはそれ自体の利点があります。
つまり、反復中にiterator.remove()メソッドを呼び出すことにより、mapからエントリを削除できます。

forEach(action)メソッドの使用

Map.forEach(action)メソッドを使用し、ラムダ式を使用してマップを反復できます。
この方法はクリーンで高速です。

キーの反復と値の検索

ここでは、最初にキーをループし(Map.keySet()メソッドを使用)、
次に各キーの値を検索します(Map.get(key)メソッドを使用)。
このメソッドは、キーによる値の取得には時間がかかる可能性があるため、かなり遅く、非効率的です。

5つの方法すべてを使って実装

先ほど紹介した5つの方法をそれぞれ、サンプルコードを使って
実装してみます。Map内は同じものを使用し、それぞれの方法で取り出しています。

出力結果

Sample1
キー : 1 値 : 1月
キー : 2 値 : 2月
キー : 3 値 : 3月
キー : 4 値 : 4月
キー : 5 値 : 5月
キー : 6 値 : 6月
Sample2
キー : 1 値 : 1月
キー : 2 値 : 2月
キー : 3 値 : 3月
キー : 4 値 : 4月
キー : 5 値 : 5月
キー : 6 値 : 6月
Sample3
キー : 1 値 : 1月
キー : 2 値 : 2月
キー : 3 値 : 3月
キー : 4 値 : 4月
キー : 5 値 : 5月
キー : 6 値 : 6月
Sample4
キー : 1 値 : 1月
キー : 2 値 : 2月
キー : 3 値 : 3月
キー : 4 値 : 4月
キー : 5 値 : 5月
キー : 6 値 : 6月
Sample5
キー : 1
キー : 2
キー : 3
キー : 4
キー : 5
キー : 6
値 : 1月
値 : 2月
値 : 3月
値 : 4月
値 : 5月
値 : 6月
Sample6
キー : 1 値 : 1月
キー : 2 値 : 2月
キー : 3 値 : 3月
キー : 4 値 : 4月
キー : 5 値 : 5月
キー : 6 値 : 6月

Writer
壷井

壷井

株式会社flyhawkの壷井です。フライテックメディア事業部でのメディア運営・ライター業務なども担当。愛機はMac Book AirとThinkPad。好きな言語:swift、JS系(Node.js等)。好きなサーバー:AWS。受託開発やプログラミングスクールの運営をしております。ご気軽にお問い合わせください。

最新の案件情報

フリーランスエンジニアの案件探し