【Java】Map(HashMap・TreeMap)のkey・valueでソートする方法

Mapのキーを指定してソートするためにはどうすればいいの?
Mapの値を指定してソートするためにはどうすればいいの?
昇順と降順でソートするためにはどうすればいいの?
複数キーがある場合はどうやってソートするの?

JavaのMapを扱う上で、データをソート(並べ替え)する処理はよく使います。今回はMapでソートする方法について解説していきます。

この記事では、Mapのソートについて

  • 【基礎】HashMapのソート方法
  • 【基礎】TreeMapのソート方法
  • 【発展】複数のキーでソートする方法

などの基本から発展的な内容についてもわかりやすく解説していきます。

HashMapのソート方法

ここでは、HashMapのソートについて、

  • キー名でソートする方法
  • 値を指定して昇順と降順でソートする方法

の方法をそれぞれ説明します。

キー名でソートする方法

Mapをキー名指定でソートする場合、Objectクラスを使用してMapの要素数を取得し、ソートするためにArrays.sortメソッドを使用します。以下にキー名でソートする方法を記述します。

なお、Arrays.sortメソッドを使用するためには、java.util.Arraysをインポートする必要があります。

実行結果:

このサンプルコードでは、定義したMap変数mMapにキー名が1、2、4、5、3の順に値を設定しています。Objectクラスを宣言し、変数mapkeyにMapの要素を全て取得します。次にArraysクラスのsortメソッドを使用し、Mapのキーをソートしています。

ループでMapの値を確認すると、ソートされていることがわかります。

値でソートする方法(compareToを使用)

ここでは、Mapの値を指定して、昇順と降順それぞれのソートの方法について記載します。

実行結果:

このサンプルコードのコメントに記載している、1〜7の詳細を以下に説明します。

  1. 定義したMap変数mMapにキー名が1、2、4、5、3の順に値を設定
  2. MapのEntry(キーと値のペア)のリストを作成
  3. Collectionクラスのsortメソッドを使用して、比較関数Comparatorで、MapのEntryの値を比較し、compare関数を使用してMapのEntryのobj1(昇順)、obj2(降順)を定義
  4. compareToメソッドを使用して降順で並べ替えられた要素を返す
  5. ループで要素数を順に表示させていくと、昇順でソートされていく
  6. 降順でソートするときは、compareToメソッドを使用するときに、Entryのobj2(降順)を指定して返せばOK
  7. ループで要素数を順に表示させていくと、降順でソートされていく

TreeMapのソート方法

TreeMapもHashMapと同じようにMapを実装したコレクションクラスです。基本的な使用方法はHashMapと同じですが、TreeMapの特性としてputメソッドで格納した値を内部で自動的にソートして保持されます。以下にTreeMapを使用したサンプルコードを記述します。

なお、TreeMapを使用する際には、java.util.TreeMapをインポートする必要があります。

実行結果:

このサンプルコードでは、キーを1、2、5、3、4の順に格納していますが、実行結果の値を確認すると、値のキーがソートされていることがわかります。

複数のキーでソートする方法

ここでは、MapとListが入れ子になっている場合にソートする方法を紹介します。

実行結果:

このサンプルコードでは、Map変数mMap1に、作成したlList1、lList2、lList3をそれぞれMapの値2、3、1の順に格納しています。次にMapの値でのソート方法同様に、MapのEntryのリストを作成して、比較関数を使用してソートした結果を返しています。

Mapについてもっと詳しく知りたい方へ

Mapのさまざまな使い方については以下の記事にまとめていますので、ぜひ参考にしてくださいね!

【Java入門】Mapの使い方総まとめ(HashMapで初期化、値のソート)
更新日 : 2019年5月22日

compareToで大小を比較する方法総まとめ

compareToメソッドで大小を比較するいろいろな方法を次の記事にまとめているので、ぜひ確認してください!

【Java入門】compareToで大小を比較をする方法総まとめ(文字列/日付)
更新日 : 2019年4月23日

まとめ

ここでは、Mapでのキー名を指定してのソート、値を指定してのソート、昇順・降順でのソートなどを一通り説明しました。MapやListなどのコレクションをソートする方法は、何パターンかありますが、慣れないうちは難しく感じるかもしれません。

もし、Mapでのソートをする方法を忘れてしまったら、この記事を思い出してくださいね!

LINEで送る
Pocket

最短でエンジニアを目指すなら侍エンジニア塾

cta_under_bnr

侍エンジニア塾は業界で初めてマンツーマンレッスンを始めたプログラミングスクールです。これまでの指導実績は16,000名を超え、未経験から数多くのエンジニアを輩出しています。

あなたの目的に合わせてカリキュラムを作成し、現役エンジニア講師が専属であなたの学習をサポートするため効率よく学習を進めることができますよ。

無理な勧誘などは一切ありません。まずは無料体験レッスンを受講ください。

無料体験レッスンの詳細はこちら

書いた人

ヤマシタ

エンジニア歴10年のフリーランスエンジニア。ITに関わるさまざまなコンテンツの企画・制作も行っています。
ITに関してはノウハウ系、ライフハック系、トレンド系など、200本以上の執筆経験があります。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説