HashMap要素のソートの実装
HashMap要素のソートの実装
HashMap
の集合が知られており、Userにはname(String)およびage(int)属性があります.HashMapのソート機能を実装する方法を書いてください.この方法は、HashMap
がパラメータであり、戻りタイプがHashMap
であり、HashMapのUserのage逆シーケンスをソートすることを要求します.ソート時にkey=valueキー値ペアは分解できません.HashMap自体はソートできませんが、この問題はHashMapにソートさせなければなりません.APIにこのようなMap構造が秩序化されているかどうかを考えなければなりません.LinkedHashMap、はい、彼です.彼はMap構造で、チェーンテーブル構造でもあります.秩序化されています.もっと喜ばしいのは彼がHashMapのサブクラスです.私たちはLinkedHashMap
に戻って、インタフェースにも合っています.(親プログラミングの考え方).しかし、集合に対する操作は、JDKのAPIでJDKのAPIがあることを原則としなければならない.例えば、ソートアルゴリズムでは泡を出したり選択したりするのではなく、まずCollectionsで集合ツールクラスを考えなければならない.public class CollectionsTest {
public static void main(String[] args) {
List list = Collections.synchronizedList(new ArrayList());
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(Map.Entry o1, Map.Entry o2) {
// User age
return o2.getValue().getAge() - o1.getValue().getAge();
}
});
// HashMap
LinkedHashMap linkedHashMap = new LinkedHashMap();
// List LinkedHashMap
for (Map.Entry entry : list) {
linkedHashMap.put(entry.getKey(), entry.getValue());
}
//
return linkedHashMap;
}
}
class User {
String name;
int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}