面试笔记----------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
新建一个Java的测试类
TestMain.java
运行结果:
已知一个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}}
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c语言实现hashmap(转载)
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序