public class HashMapSort {
public static void main(String[] args) {
HashMap<Integer, Student> hashMap = new HashMap<Integer,Student>();
hashMap.put(100, new Student("姚明",32));
hashMap.put(2, new Student("TFboys",13));
hashMap.put(30, new Student("刘翔",28)); System.out.println("排序前:");
System.out.println(""+hashMap.toString());
System.out.println("排序后:");
HashMap<Integer, Student> result = sort(hashMap);
System.out.println(""+ result);
} private static HashMap<Integer, Student> sort(
HashMap<Integer, Student> hashMap) {
//第一步:LinkedHashMap采用的是链表结构,可以实现排序,并且是hashmap的子类
//第二步:排序可以采用集合框架中的Collections.sort(list集合,比较器);
//该方法可以自定义比较器
//第三步:将参数hashmap转化成list集合,这一步是最关键的,hashmap有个成员函数enrtyset,可以将hashmap转化成set集合
//set集合和list集合都属于collection的子类,list集合的构造函数可以是collection的子类,我们可以利用set集合构建
//list集合达到我们将hashmap转化成list集合的目的
//第五步:将排序之后的list集合存储在LinkedHashMap中 LinkedHashMap<Integer, Student> linkedHashMap = new LinkedHashMap<Integer,Student>();
Set<Entry<Integer, Student>> entrySet = hashMap.entrySet();
ArrayList<Entry<Integer, Student>> arrayList = new ArrayList<>(entrySet);
Collections.sort(arrayList,new Comparator<Entry<Integer, Student>>() {
@Override
public int compare(Entry<Integer, Student> obj1,
Entry<Integer, Student> obj2) {
// TODO Auto-generated method stub
return obj1.getValue().getAge() - obj2.getValue().getAge();
}
});
System.out.println(""+arrayList.toString());
for(int i = 0 ;i < arrayList.size(); i++){
Entry<Integer, Student> entry = arrayList.get(i);
linkedHashMap.put(entry.getKey(), entry.getValue());
}
return linkedHashMap;
}
} public class Student implements Serializable{
/**
*
*/
private static final long serialVersionUID = 125252L;
private transient String name = "姚明";
private int age; public Student(String name, int age) {
super();
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;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
}

上面中最重要的是理解下面的几个思路:

1、   返回值是HashMap,该hashmap具有输出排序的功能,只能想到链接结构可以实现排序,想到hashmap的子类LinkedHashMap。

2、   第二个很关键的是要实现自定义排序,第一想到的肯定是集合框架类的Collections的sort方法,该方法可以实现自定义排序

3、   第三个是Collections只能实现对集合框架类排序,list set属于Collection集合,map属于了另外一个框架

4、   那些要将hashmap转化成list集合才能进行排序,hashmap的成员函数entrySet可以将hashmap转化成set集合,利用set集合可以构造list集合

5、   对list集合进行排序

6、   将排序后的list集合存储在LinkedhashMap中,返回。

上面这个面试题对整个集合框架类启到了一个很好的复习的作用

java 中对hashmap进行排序的更多相关文章

  1. java 中遍历hashmap 和hashset 的方法

    一.java中遍历hashmap:    for (Map.Entry<String, Integer> entry : tempMap.entrySet()) {     String ...

  2. Java中关于HashMap的元素遍历的顺序问题

    Java中关于HashMap的元素遍历的顺序问题 今天在使用如下的方式遍历HashMap里面的元素时 1 for (Entry<String, String> entry : hashMa ...

  3. Java中关于HashMap的使用和遍历(转)

    Java中关于HashMap的使用和遍历 分类: 算法与数据结构2011-10-19 10:53 5345人阅读 评论(0) 收藏 举报 hashmapjavastringobjectiterator ...

  4. Java 中常见的各种排序算法汇总

    首先,Java中自已是有排序的 说明:(1)Arrays类中的sort()使用的是“经过调优的快速排序法”;(2)比如int[],double[],char[]等基数据类型的数组,Arrays类之只是 ...

  5. [转]为什么Java中的HashMap默认加载因子是0.75

    前几天在一个群里看到有人讨论hashmap中的加载因子为什么是默认0.75. HashMap源码中的加载因子 static final float DEFAULT_LOAD_FACTOR = 0.75 ...

  6. Java中的HashMap的工作原理是什么?

    问答题23 /120 Java中的HashMap的工作原理是什么? 参考答案 Java中的HashMap是以键值对(key-value)的形式存储元素的.HashMap需要一个hash函数,它使用ha ...

  7. 沉淀再出发:java中的HashMap、ConcurrentHashMap和Hashtable的认识

    沉淀再出发:java中的HashMap.ConcurrentHashMap和Hashtable的认识 一.前言 很多知识在学习或者使用了之后总是会忘记的,但是如果把这些只是背后的原理理解了,并且记忆下 ...

  8. 关于Java中的HashMap的深浅拷贝的测试与几点思考

    0.前言 工作忙起来后,许久不看算法,竟然DFA敏感词算法都要看好一阵才能理解...真是和三阶魔方还原手法一样,田园将芜,非常可惜啊. 在DFA算法中,第一步是需要理解它的数据结构,在此基础上,涉及到 ...

  9. JAVA中的集合与排序

    一:常见的集合类 Collection接口  和   Map接口 Collection ①:collection是最常见的集合的上级接口. ②:继承自collection的常用接口有List,Set, ...

随机推荐

  1. 深度学习入门: CNN与LSTM(RNN)

    1. 理解深度学习与CNN: 台湾李宏毅教授的入门视频<一天搞懂深度学习>:https://www.bilibili.com/video/av16543434/ 其中对CNN算法的矩阵卷积 ...

  2. 关于zabbix利用snmp协议从交换机获取的端口带宽数据的概念问题

    关于zabbix利用snmp协议从交换机获取的端口带宽数据的概念问题:使用端口OID号获得的数据实际是即时的端口总数据量,而在计算带宽时,需要选择一个时间段,在时间段的结束点获得的总数据量减去在时间段 ...

  3. Spring boot Sample 008之spring-boot-logback

    一.环境 1.1.Idea 2020.1 1.2.JDK 1.8 二.目的 spring boot 整合log4j2 二.步骤 2.1.点击File -> New Project -> S ...

  4. C#中值类型,引用类型,字符串类型的区别(内存图解)

    如果用图片来解释值类型,引用类型和字符串类型(引用类型的一种)的区别的话 值类型: 引用类型: string类型:

  5. Java实现 蓝桥杯 算法提高 上帝造题五分钟

    算法提高 上帝造题五分钟 时间限制:1.0s 内存限制:256.0MB 问题描述 第一分钟,上帝说:要有题.于是就有了L,Y,M,C 第二分钟,LYC说:要有向量.于是就有了长度为n写满随机整数的向量 ...

  6. Java实现 LeetCode 140 单词拆分 II(二)

    140. 单词拆分 II 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中.返回所有这些可能的句子. 说明: 分 ...

  7. java实现人员排日程

    某保密单位机要人员 A,B,C,D,E 每周需要工作5天,休息2天. 上级要求每个人每周的工作日和休息日安排必须是固定的,不能在周间变更. 此外,由于工作需要,还有如下要求: 所有人的连续工作日不能多 ...

  8. java实现第三届蓝桥杯提取子串

    提取子串 [代码填空](满分16分) 串"abcba"以字母"c"为中心左右对称:串"abba" 是另一种模式的左右对称.这两种情况我们都称 ...

  9. 读取Excel文件,抛出类似Cleaning up unclosed ZipFile for archive D:\project\myTest\autoAppUI\excelMode\用例模板2.xlsx 错误解决

    读excel用例的时候总报这个错误,一直不知道什么原因~~~~~~~~~~ 今天突然顿悟了,原来是读excel的时候用到了文件流,我在读文件的方法里加了流关闭的操作,完美解决报错

  10. 彻底搞懂 etcd 系列文章(三):etcd 集群运维部署

    0 专辑概述 etcd 是云原生架构中重要的基础组件,由 CNCF 孵化托管.etcd 在微服务和 Kubernates 集群中不仅可以作为服务注册与发现,还可以作为 key-value 存储的中间件 ...