HashMap进行排序操作
2018-08-28 00:13:59 KyleWong123
HashMap本身是无序的,因此要对HashMap进行排序,就要依赖其他的类,比如LinkedHashMap,因为该类的底层是链表,是有序的,所以可以返LinkedHashMap来确保顺序,但是对于排序我们应该借助java API为我们提供的Collections工具;上个栗子;
import java.util.*;
class User{
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
public class HashMapSort {
public static void main(String[] args) {
HashMap<Integer, User> hashMap = new HashMap<>();
hashMap.put(1,new User("张三",32));
hashMap.put(2,new User("张四",33));
hashMap.put(3,new User("王五",22));
System.out.println(hashMap);
//調用sortHashMap()排序并返回新的集合
HashMap<Integer,User> sort = sortHashMap(hashMap);
System.out.println(sort);
}
public static HashMap<Integer,User> sortHashMap(HashMap<Integer,User> map){
//從HashMap中恢復entry集合,得到全部的鍵值對集合
Set<Map.Entry<Integer,User>> entey = map.entrySet();
//將Set集合轉為List集合,為了實用工具類的排序方法
List<Map.Entry<Integer,User>> list = new ArrayList<Map.Entry<Integer,User>>(entey);
//使用Collections工具類對list進行排序
Collections.sort(list, new Comparator<Map.Entry<Integer, User>>() {
@Override
public int compare(Map.Entry<Integer, User> o1, Map.Entry<Integer, User> o2) {
//按照age倒敘排列
return o2.getValue().getAge()-o1.getValue().getAge();
}
});
//創建一個HashMap的子類LinkedHashMap集合
LinkedHashMap<Integer,User> linkedHashMap = new LinkedHashMap<Integer,User>();
//將list中的數據存入LinkedHashMap中
for(Map.Entry<Integer,User> entry:list){
linkedHashMap.put(entry.getKey(),entry.getValue());
}
return linkedHashMap;
}
}
输出结果
{1=User{name='张三', age=32}, 2=User{name='张四', age=33}, 3=User{name='王五', age=22}}
{2=User{name='张四', age=33}, 1=User{name='张三', age=32}, 3=User{name='王五', age=22}}