您的位置:首页 > 职场人生

面试笔记----------HashMap排序

2016-06-07 11:22 411 查看
问题描述:

已知一个HashMap<Integer , User>集合,User有name(String)和age(int)属性。请写一个方法实现对HashMap的排序功能,改方法接收HashMap<Integer , User>为参数,返回类型为HashMap<Integer , User>,要求对HashMap中的User的age进行倒序排序,排序时key和value键值对不得拆散。

分析:

HashMap本身是不可排序的,只能在Api中有没有Map结构是有序的-----LinkedHashMap。

那么就开始码代码。

新建一个javabean

User.java

/**
* Created by zuo on 16-6-7.
*/
public class User {

private String name;
private int 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;
}

@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}


新建一个Java的测试类

TestMain.java

import java.util.*;

public class TestMain {

public static void main(String[] args) {

HashMap<Integer , User> hashMap = new HashMap<Integer , User>();

User user = new User();
user.setName("张三");
user.setAge(21);

hashMap.put(1 , user);

User user1 = new User();
user1.setName("李四");
user1.setAge(22);

hashMap.put(2 , user1);

User user2 = new User();

user2.setName("王五");
user2.setAge(23);

hashMap.put(3 , user2);

System.out.println("排序前的HashMap:" + hashMap);

HashMap<Integer , User> sortedHashMap = sortHashMap(hashMap);

System.out.println("排序后的HashMap:" + sortedHashMap);

}

private static HashMap<Integer, User> sortHashMap(HashMap<Integer, User> hashMap) {
/**
* 创建一个有序的HashMap数据结构,LinkHashMap
*/

LinkedHashMap<Integer , User> newHashMap = new LinkedHashMap<Integer , User>();

//凡是对集合进行排序,使用java提供的默认的工具类Collections

/**
* 把Map转成List
*      1、把Map转成set
*      2、把Set装成List
*/

Set<Map.Entry<Integer, User>> entries = hashMap.entrySet();
ArrayList<Map.Entry<Integer, User>> list = new ArrayList<>(entries);

Collections.sort(list, new Comparator<Map.Entry<Integer, User>>() {
@Override
public int compare(Map.Entry<Integer, User> o1, Map.Entry<Integer, User> o2) {

/**
* 倒序 o2-o1  后-前
* 正序 o1-o2   前-后
*/
return o2.getValue().getAge() - o1.getValue().getAge();
}
});

//将排序好的List转换成HahshMap

for (int i = 0; i < list.size(); i++) {
Map.Entry<Integer , User> entry = list.get(i);
newHashMap.put(entry.getKey() , entry.getValue());
}

//将排序的HashMap返回
return newHashMap;
}
}


运行结果:

排序前的HashMap:{1=User{name='张三', age=21}, 2=User{name='李四', age=22}, 3=User{name='王五', age=23}}
排序后的HashMap:{3=User{name='王五', age=23}, 2=User{name='李四', age=22}, 1=User{name='张三', age=21}}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  面试 hashmap java