Java初心者の競技プログラミング日記

Dvorak配列でjavaを書いてます

Mapをキーでソートする方法

マップをソートするには、まずキーをObject型の配列に格納し、配列をソートして、その配列をもとにしてマップから順番に値を取り出していく……ということを以前はやっていたのだが、よくよく調べてみると、自動でソートしてくれるTreeMapなるものが存在しているらしい。

import java.util.*;

public class Main {
	static Scanner sc = new Scanner(System.in);
	public static void main(String[] args) {
		Map<Integer,String> map = new TreeMap<>();
		map.put(1,"one");
		map.put(3,"three");
		map.put(5,"five");
		map.put(4,"four");
		map.put(2,"two");
		
		map.forEach((key,value) -> System.out.println(key+":"+value));
		
		/*
		
		1:one
		2:two
		3:three
		4:four
		5:five
		
		*/
	}
}


今回のように、コンストラクターに何も渡さなければ昇順に並ぶ。
Comparatorを渡して降順にすることもできる。

昇順:TreeMap<>();
降順:TreeMap<>(Comparator.reverseOrder());

値でソートする方法についてはまだほとんど分かっていないので、理解できたら記事にしたい。