HashMapを値で並べ替える方法

記事で見たようにArrayListをソートする方法。このチュートリアルでは、Java で HashMap を昇順と降順で ソートする方法を学習します。これは、ArrayList. インターフェイスを実装する "Comparator" という名前のクラスを作成します。コンパレータ 

1) Comparatorでソートし、結果をTreeMapなぜComparatorクラスのインスタンスをTreeMapコンストラクタのパラメータとして渡すのですか? 単にTreeMapMapインタフェースをHashMapとして実装し、TreeMap(Comparator comp)コンストラクタを持ちます。唯一の違いは、TreeMapがkeys.

import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;

public class Tri {

public static void main(String[] args) {

HashMap map = new HashMap();
Comparator comp = new Comparator(map);
TreeMap map_apres = new TreeMap(comp);

map.put("A",49);
map.put("B",18);
map.put("C",92);
map.put("D",37);
map.put("E",62);

System.out.println("ソート前: "+map);
map_apres.putAll(マップ);
System.out.println("ソート後: "+map_apres);
}
}

class Comparator implements Comparator {

Map tuple;
public Comparator(HashMap map) {
this.tuple = map;
}

//このコンパレータは要素を降順に並べます
@Override
public int compare(Object o1, Object o2) {
// TODO 自動生成メソッド stub
if (int) tuple.get(o1) >= (int) tuple.get(o2)) {
return -1;
} else {
return 1;
}
}
}

2) Collections.sort

この例では、Double 型の項目を並べ替えます。項目は、Listインタフェースを実装するLinkedListにコピーされ、Collections.sort は、以前の記事で他のオブジェクト コレクションを並べ替えるために使用しました。ソート後、ソートされた要素をLinkedListからoutput.

public static void main(String[] args) {

HashMap map = new HashMap();

map.put("A",18.5);
map.put("E",76.8);
map.put("C",24.1);
map.put("F",86.2);
map.put("D",5.7);
map.put("B",84.6);

System.out.println("ソート前: "+map);
System.out.println("ソート後: "+sortWithValue(map));
}

public static HashMapsortWithValue( ハッシュマップmap ){
リスト>list =
new LinkedList>( map.entrySet() );
Collections.sort( list, new Comparator>(){
public int compare( Map.Entryo1、Map.Entryですo2 ){
return (o1.getValue()).compareTo( o2.getValue());
}
});

HashMapmap_apres = new LinkedHashMap();
for(Map.Entryentry : list)
map_apres.put( entry.getKey(), entry.getValue() );
return map_apres;
}
Run:

ソート前: {D=5.7, E=76.8, F=86.2, A=18.5, B=84.6, C=24.1}
ソート後: {D=5.7, A=18.5, C=24.1, E=76.8, B=84.6, F=86.2}
降順でソートするには、compareで比較の順序を変更するだけです:

return(o2.getValue()).compareTo( o1.getValue());
References:
Oracle Documentation - HashMap
TutorialsPoint - HashMapクラス
ドキュメントコンパレータ< / a >< br / >LinkedHashMap Documentation