HashMapソートの一例
2179 ワード
Userにはname(String)とage(int)性があるHashMap集合が知られている.HashMapのソート機能を実装する方法を書いてください.この方法では、HashMapがパラメータであり、戻りタイプがHashMapであり、HashMapのUserのage逆シーケンスをソートする必要があります.ソート時にkey=valueキー値ペアは分解できません.分析:HashMap自体はソートできませんが、この問題はHashMapにソートさせなければなりません.APIにこのようなMap構造が秩序化されているかどうかを考えなければなりません.LinkedHashMap、はい、彼です.彼はMap構造で、チェーンテーブル構造で、秩序化されています.もっと喜ばしいのは彼がHashMapのサブクラスです.LinkedHashMapに戻ればいいです.インタフェース向け(親プログラミングの考え方)にも合致します.
public static void main(String[] args) {
//
HashMap users = new HashMap<>();
users.put(1, new User(" ", 25));
users.put(3, new User(" ", 22));
users.put(2, new User(" ", 28));
System.out.println(users);
HashMap sortHashMap = sortHashMap(users);
System.out.println(sortHashMap);
/**
* * {1=User [name= , age=25], 2=User [name= , age=28], 3=User [name= , age=22]} {2=User [name= , age=28], 1=User [name= , age=25], 3=User [name= , age=22]}
*/
}
//
public static HashMap sortHashMap(HashMap map) {
// map
Set> entrySet = map.entrySet();
// set List , ,
List> list = new ArrayList>(entrySet);
// Collections list ,
Collections.sort(list, new Comparator>() {
@Override
public int compare(Entry o1, Entry o2) { // User age
return o2.getValue().getAge() - o1.getValue().getAge();
}
});
// HashMap
LinkedHashMap linkedHashMap = new LinkedHashMap();
// List LinkedHashMap
for (Entry entry : list) {
linkedHashMap.put(entry.getKey(), entry.getValue());
}
//
return linkedHashMap;
}