HashMap は、 for 文で要素を巡回するときに整列されない順序で巡回します。 この記事では、ソートされた順序でMap、HashMapを巡回する方法を紹介します。
1. Map.Entry リストを並べ替えて巡回
HashMap.entrySet()
は Map の要素を Entry オブジェクトとして Set に格納して返します。
返された Set は、ArrayList コンストラクタの引数として渡してリストにすることができます。
こうして作成されたリストを sort()
でソートし、for 文で巡回できます。次の例では、Keyに基づいて昇順に並べ替えています。
import java.util.*;
public class Example1 {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("apple", 400);
map.put("kiwi", 200);
map.put("grape", 300);
map.put("banana", 150);
List<Map.Entry<String, Integer>> entries = new ArrayList<>(map.entrySet());
entries.sort(Comparator.comparing(Map.Entry::getKey));
entries.forEach(System.out::println);
}
}
Output:
apple=400
banana=150
grape=300
kiwi=200
もし value を基準にソートしたいときは、 comparing(Map.Entry::getValue)
のように実装できます。
entries.sort(Comparator.comparing(Map.Entry::getValue));
2. Streamによるソートと巡回
次の例に示すように、MapのEntrySetをStreamにし、Streamでソートして巡回することができます。
import java.util.*;
public class Example2 {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("apple", 400);
map.put("kiwi", 200);
map.put("grape", 300);
map.put("banana", 150);
map.entrySet().stream().sorted(Comparator.comparing(Map.Entry::getKey))
.forEach(System.out::println);
}
}
Output:
apple=400
banana=150
grape=300
kiwi=200
3. TreeMapで並べ替えと巡回
TreeMapは、入力順序が維持されるデータ構造です。つまり、すべての要素を巡回すると、要素が入力された順序で巡回します。
データの並べ替え後にMapに保存する必要がある場合は、TreeMapを使用できます。並べ替えられた順序で要素が格納されるため、巡回するときにマップを並べ替える必要なく繰り返し文で巡回するだけです。
import java.util.Map;
import java.util.TreeMap;
public class Example {
public static void main(String[] args) {
Map<String, Integer> map = new TreeMap<>();
map.put("apple", 400);
map.put("kiwi", 200);
map.put("grape", 300);
map.put("banana", 150);
map.entrySet().forEach(System.out::println);
}
}
Output:
apple=400
banana=150
grape=300
kiwi=200
Related Posts
- Java - BufferedReaderでファイルを読む
- Java - BufferedWriterでファイルを書き込む
- Java - BigIntegerの範囲、比較、演算、キャスト
- Java charAt()関数を学ぶ
- Java contains()で文字(大文字と小文字のX)を含める
- Java - Set(HashSet)を配列に変換する
- Java - 文字列の最初の文字、最後の文字を確認する
- Java - 文字列を1文字ずつ切り捨てる
- Java - 文字列の単語数を取得する
- Java - 1秒ごとに繰り返し実行
- Java - 配列をSet(HashSet)に変換する
- Java - 複数のSet(HashSet)を組み合わせる
- Java - コマンドライン引数の入力を受け取る
- Java - リスト逆順に巡回、3つの方法
- Java - 特定の条件でリストをフィルタリングする3つの方法
- Java - HashMapすべての要素の合計、平均計算
- Java - 特定の条件でHashMapをフィルタリングする
- Java - シングルトンパターンの実装
- Java - 数字の左側にゼロを埋める
- Java - String配列の初期化方法
- Java - ソートされた順序で Map(HashMap) 巡回