java 中对hashmap进行排序

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进行排序的更多相关文章
- java 中遍历hashmap 和hashset 的方法
一.java中遍历hashmap: for (Map.Entry<String, Integer> entry : tempMap.entrySet()) { String ...
- Java中关于HashMap的元素遍历的顺序问题
Java中关于HashMap的元素遍历的顺序问题 今天在使用如下的方式遍历HashMap里面的元素时 1 for (Entry<String, String> entry : hashMa ...
- Java中关于HashMap的使用和遍历(转)
Java中关于HashMap的使用和遍历 分类: 算法与数据结构2011-10-19 10:53 5345人阅读 评论(0) 收藏 举报 hashmapjavastringobjectiterator ...
- Java 中常见的各种排序算法汇总
首先,Java中自已是有排序的 说明:(1)Arrays类中的sort()使用的是“经过调优的快速排序法”;(2)比如int[],double[],char[]等基数据类型的数组,Arrays类之只是 ...
- [转]为什么Java中的HashMap默认加载因子是0.75
前几天在一个群里看到有人讨论hashmap中的加载因子为什么是默认0.75. HashMap源码中的加载因子 static final float DEFAULT_LOAD_FACTOR = 0.75 ...
- Java中的HashMap的工作原理是什么?
问答题23 /120 Java中的HashMap的工作原理是什么? 参考答案 Java中的HashMap是以键值对(key-value)的形式存储元素的.HashMap需要一个hash函数,它使用ha ...
- 沉淀再出发:java中的HashMap、ConcurrentHashMap和Hashtable的认识
沉淀再出发:java中的HashMap.ConcurrentHashMap和Hashtable的认识 一.前言 很多知识在学习或者使用了之后总是会忘记的,但是如果把这些只是背后的原理理解了,并且记忆下 ...
- 关于Java中的HashMap的深浅拷贝的测试与几点思考
0.前言 工作忙起来后,许久不看算法,竟然DFA敏感词算法都要看好一阵才能理解...真是和三阶魔方还原手法一样,田园将芜,非常可惜啊. 在DFA算法中,第一步是需要理解它的数据结构,在此基础上,涉及到 ...
- JAVA中的集合与排序
一:常见的集合类 Collection接口 和 Map接口 Collection ①:collection是最常见的集合的上级接口. ②:继承自collection的常用接口有List,Set, ...
随机推荐
- windows下nodejs的安装
1.下载 从nodejs官网下载地址:http://www.nodejs.org 2.安装 双击node-v4.4.0-x64.msi或者其他版本 3.环境搭建 进入cmd命令窗口 进入到nodejs ...
- vue 使用 elementUI 和 antd 的细微差别
Checkbox a-checkbox 没有value属性,绑定用checked Collapse 使用折叠面板的时候,antd 的层级关系是 .ant-collapse >.ant-colla ...
- ActiveMQ 笔记(三)JMS规范和落地产品、小知识Broker
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.JMS规范概述 1.JavaEE 概述及主要核心规范 JavaEE是一套使用Java进行企业级应用开 ...
- Java实现 蓝桥杯VIP 算法提高 促销购物
算法提高 促销购物 时间限制:1.0s 内存限制:256.0MB 问题描述 张超来到了超市购物. 每个物品都有价格,正好赶上商店推出促销方案.就是把许多东西一起买更便宜(保证优惠方案一定比原价便宜). ...
- java实现第七届蓝桥杯取球博弈
题目9.取球博弈 取球博弈 两个人玩取球的游戏. 一共有N个球,每人轮流取球,每次可取集合{n1,n2,n3}中的任何一个数目. 如果无法继续取球,则游戏结束. 此时,持有奇数个球的一方获胜. 如果两 ...
- UVIYN的基本设置
- Java多线程之深入解析ThreadLocal和ThreadLocalMap
ThreadLocal概述 ThreadLocal是线程变量,ThreadLocal中填充的变量属于当前线程,该变量对其他线程而言是隔离的.ThreadLocal为变量在每个线程中都创建了一个副本,那 ...
- cacti 流量断图
问题描述 Cacti监控系统新增了一台设备,后来查询流量的时候发现流量不太对,客户跑的流量远不止8M, 下边就是记录一下问题解决的过程了. 解决过程 看到 rrdtool info 2331.rr ...
- Cypress系列(14)- 环境变量详解
如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html 前言 环境变量,其实就是根据环境的变化, ...
- 如何通过IAM打造零信任安全架构
万物互联时代来临,面对越来越严峻的企业网络安全及复杂的(如微服务,容器编排和云计算)开发.生产环境,企业 IT 急需一套全新的身份和访问控制管理方案. 为了满足企业需求,更好的服务企业用户,青云Qin ...