優先キューは適切なアプローチです。必要なのは、マップからセットを取得Entry
Comparator
し、キューへの入力としてaをオーバーライドすることだけです。
Map<Character,Integer> map = new HashMap<Character, Integer>();
map.put('a',1);
map.put('c',10);
map.put('p',5);
map.put('2',7);
PriorityQueue<Entry<Character, Integer>> pq = new PriorityQueue<Map.Entry<Character,Integer>>(map.size(), new Comparator<Entry<Character, Integer>>() {
@Override
public int compare(Entry<Character, Integer> arg0,
Entry<Character, Integer> arg1) {
return arg0.getValue().compareTo(arg1.getValue());
}
});
pq.addAll(map.entrySet());
while (!pq.isEmpty()) {
System.out.println(pq.poll());
}
降伏します(予想どおり):
a=1
p=5
2=7
c=10
注:マップの値としてキー付きのaSet
またはaを使用することは避けてください。重複する値を適切に処理できないためです。Map