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, ...
随机推荐
- Robot Framework(15)- 扩展关键字
如果你还想从头学起Robot Framework,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1770899.html 前言 什么是扩展 ...
- Rocket - debug - TLDebugModuleInner - Abstract Command State Machine
https://mp.weixin.qq.com/s/RcXI8uEHvZHGCvX3DoVR4Q 简单介绍TLDebugModuleInner中处理抽象命令时的状态机. 1. CtrlState 定 ...
- Java实现 LeetCode 717 1比特与2比特字符(暴力)
717. 1比特与2比特字符 有两种特殊字符.第一种字符可以用一比特0来表示.第二种字符可以用两比特(10 或 11)来表示. 现给一个由若干比特组成的字符串.问最后一个字符是否必定为一个一比特字符. ...
- Java实现 蓝桥杯VIP 算法提高 统计单词数
算法提高 统计单词数 时间限制:1.0s 内存限制:512.0MB 问题描述 统计输入英文文章段落中不同单词(单词有大小写之分, 但统计时忽略大小写)各自出现的次数. 输入段落中所含单词的总数不超过1 ...
- Java实现背包问题
1 问题描述 给定n个重量为w1,w2,w3,-,wn,价值为v1,v2,-,vn的物品和一个承重为W的背包,求这些物品中最有价值的子集(PS:每一个物品要么选一次,要么不选),并且要能够装到背包. ...
- java实现平面4点最小距离
已知平面上若干个点的坐标. 需要求出在所有的组合中,4个点间平均距离的最小值(四舍五入,保留2位小数). 比如有4个点:a,b,c,d, 则平均距离是指:ab, ac, ad, bc, bd, cd ...
- (三)SQLMap工具-使用选项的操作命令&功能
目录结构 1.Options(选项) 2.Target(目标) 3.Request(请求) 4.Optimization(优化) 5.Injection(注入) 6.Detection(检测) 7.T ...
- 朋友,您可能是MCR的受害者
2018 年五月之后,微软将后续发布的所有 docker image 都推送到了 MCR (Miscrosoft Container Registry),但在中国大陆,它的速度实在是令人发指,本文将介 ...
- node.js vue开发环境搭建
开发工具安装 1.安装node.js 双击安装程序 node-v8.9.3-x64.msi,进行安装即可 2.设置taobao镜像 npm config set registry https://re ...
- ArrayList、LinkedList、Vector、Array和HashMap、HashTable
就 ArrayList 与 Vector 主要从二方面来说. 一.同步性:Vector 是线程安全的,也就是说是同步的,而ArrayList 是线程序不安全的,不是同步的 二.数据增长:当需要增长时, ...