如何对HashMap按键值排序

Java中HashMap是一种用于存储“键”和“值”信息对的数据结构。不同于LinkedHashMap,它不会维持插入元素的顺序。因此,在键或值的基础上排序HashMap是一个很难的面试问题,如果你不知道如何解决的话。下面让我们看看如何解决这个问题。

1.创建一个简单的HashMap,并插入一些键和值。

    Map<String,Integer> aMap = new HashMap<String,Integer>();
    //adding keys and values
    aMap.put("Five", 5);
    aMap.put("Seven", 7);
    aMap.put("Four", 4);
    aMap.put("Eight", 8);
    aMap.put("One", 1);
    aMap.put("Two", 2);
    aMap.put("Three", 3);

2.利用Set entrySet(): 返回Map.Entry对象的视图集,即映像中的关键字/值对

 Set<Map.Entry<String,Integer>> mapEntries = aMap.entrySet();

3.从上述mapEntries创建LinkedList。我们将排序这个链表来解决顺序问题

List<Map.Entry<String,Integer>> aList = new LinkedList<Map.Entry<String,Integer>>(mapEntries);

    // sorting the List
    Collections.sort(aList, new Comparator<Map.Entry<String,Integer>>(){
        @Override
        public int compare(Map.Entry<String, Integer> ele1, Map.Entry<String, Integer> ele2){
            return ele1.getValue().compareTo(ele2.getValue());
        }
    });

4.Collections.sort()是一个内置方法,仅排序值的列表。它在Collections类中重载。这两种个方法是

    public static <T extends Comparable<? super T>> void sort(List<T> list)
     
    public static <T> void sort(List<T> list, Comparator<? super T> c)

5.完整代码:

    package cn.edu.ahui;
    import java.util.*;
     
    /*
     * @author leo
     * @data 2017.3.10
    */
     
    public class SortHashMapByValues {
         private static void sortMapByValues(Map<String, Integer> aMap){
             Set<Map.Entry<String,Integer>> mapEntries = aMap.entrySet();
             System.out.println("Values and Keys before sorting ");
             for(Map.Entry<String,Integer> entry : mapEntries)
                 System.out.println(entry.getKey() + " - "+ entry.getValue());
             //use LinkedList to sort, because insertion of elements in linked list is faster than ArrayList.
             List<Map.Entry<String,Integer>> aList = new LinkedList<Map.Entry<String,Integer>>(mapEntries);
             // sorting the List
             Collections.sort(aList, new Comparator<Map.Entry<String,Integer>>(){
                 @Override
                 public int compare(Map.Entry<String, Integer> ele1, Map.Entry<String, Integer> ele2){
                     return ele1.getValue().compareTo(ele2.getValue());
                }
             });
             // Storing the list into Linked HashMap to preserve the order of insertion.
             Map<String,Integer> aMap2 = new LinkedHashMap<String, Integer>();
             for(Map.Entry<String,Integer> entry: aList){
                 aMap2.put(entry.getKey(), entry.getValue());
             }
             // printing values after sorting of map
             System.out.println("Values and Keys after sorting ");
             for(Map.Entry<String,Integer> entry : aMap2.entrySet()){
                 System.out.println(entry.getKey() + " - " + entry.getValue());
             }
        }
        public static void main(String[] args){
            Map<String,Integer> aMap = new HashMap<String,Integer>();
            //adding keys and values
            aMap.put("Five", 5);
            aMap.put("Seven", 7);
            aMap.put("Four", 4);
            aMap.put("Eight", 8);
            aMap.put("One", 1);
            aMap.put("Two", 2);
            aMap.put("Three", 3);
            sortMapByValues(aMap);
        }  
    }

6.运行结果:

Values and Keys before sorting
Eight - 8
Five -  5
Four - 4
One - 1
Seven - 7
Two - 2
Three - 3
Values and Keys after sorting
One - 1
Two - 2
Three - 3
Four - 4
Five - 5
Seven - 7
Eight - 8

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的纺织品企业财务管理系统,源码+数据库+毕业论文+视频演示 在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对纺织品企业财务信息管理的提升,也为了对纺织品企业财务信息进行更好的维护,纺织品企业财务管理系统的出现就变得水到渠成不可缺少。通过对纺织品企业财务管理系统的开发,不仅仅可以学以致用,让学到的知识变成成果出现,也强化了知识记忆,扩大了知识储备,是提升自我的一种很好的方法。通过具体的开发,对整个软件开发的过程熟练掌握,不论是前期的设计,还是后续的编码测试,都有了很深刻的认知。 纺织品企业财务管理系统通过MySQL数据库与Spring Boot框架进行开发,纺织品企业财务管理系统能够实现对财务人员,员工,收费信息,支出信息,薪资信息,留言信息,报销信息等信息的管理。 通过纺织品企业财务管理系统对相关信息的处理,让信息处理变的更加的系统,更加的规范,这是一个必然的结果。已经处理好的信息,不管是用来查找,还是分析,在效率上都会成倍的提高,让计算机变得更加符合生产需要,变成人们不可缺少的一种信息处理工具,实现了绿色办公,节省社会资源,为环境保护也做了力所能及的贡献。 关键字:纺织品企业财务管理系统,薪资信息,报销信息;SpringBoot
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值