HashMapをValueでソート

HashMapをValueでソートする方法。

参考:
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=20928&forum=12
http://javatec.blog105.fc2.com/blog-entry-54.html

	private HashMap<Integer, Integer> digest;
	private ArrayList<Integer> sortedKeys;

key、valueともにIntegerのHashMap digestを考えて、valueを降順に並べるkeyのlistをArrayList sortedKeysに作る。

	@SuppressWarnings("unchecked")
	private void makeSortedKeys() {

		ArrayList<Object> entries = new ArrayList<Object>(digest.entrySet());
		Collections.sort(entries, new Comparator<Object>() {
			public int compare(Object obj1, Object obj2) {
				Map.Entry<Integer, Integer> ent1 = (Map.Entry<Integer, Integer>) obj1;
				Map.Entry<Integer, Integer> ent2 = (Map.Entry<Integer, Integer>) obj2;
				Integer val1 = (Integer) ent1.getValue();
				Integer val2 = (Integer) ent2.getValue();
				return val2.compareTo(val1);
			}
		});

		for (int i = 0; i < entries.size(); i++) {
			Map.Entry<Integer, Integer> me = (Map.Entry<Integer, Integer>) entries.get(i);
			sortedKeys.add((Integer) me.getKey());
		}

	}

sortedKeysを順に取り出せば、HashMapのvalueがソートされて出てくる。