Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 408|回复: 0

[集合学习]HashMap与排名次

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-29 23:56:21 | 显示全部楼层 |阅读模式
    如何对map进行排序呢?map内部是按照hash算法存储的,但如果能对map排序在某些时候还是有用的,如有些时候,我们希望根据 value 进行排序从而得出 key 的列表,例如下面这样一组数据
       
         
          
          Ater
          100
          
          
          Yier
          150
          
          
          Nothing
          30
          
          
          Zolo
          330
          
         
        其中 key 是姓名,value 是积分,我们希望根据积分的多少进行排序然后获取出用户排名表。

    但是 java 本身不提供这样的功能。

       
      
       
       
         
       

         
       
      
       实现程序:
    1. import java.util.*;   
    2. public class MapSort{
    3.       public static void main(String args[]){
    4.           HashMap datas = new HashMap(){{   
    5.             put("Ater", 100);   
    6.             put("Yier", 150);   
    7.             put("Nothing", 30);   
    8.             put("Zolo", 330);   
    9.         }};   
    10.         
    11.         Map.Entry[] a=getSortedHashtableByValue(datas);
    12.          for(int i=0;i< a.length;i++){
    13.            System.out.println(a[i]);
    14.          }
    15.          Map.Entry[] b=getSortedHashtableByKey(datas);
    16.          
    17.            for(int i=0;i< b.length;i++){
    18.              System.out.println(b[i].getKey()+"-->"+b[i].getValue());
    19.          }
    20.       
    21.     }
    22.      /**
    23.      * @param h
    24.      * @return
    25.      * 实现对map按照value升序排序
    26.      */
    27.     @SuppressWarnings("unchecked")
    28.     public static Map.Entry[] getSortedHashtableByValue(Map h) {
    29.         Set set = h.entrySet();
    30.         Map.Entry[] entries = (Map.Entry[]) set.toArray(new Map.Entry[set.size()]);
    31.         Arrays.sort(entries, new Comparator() {
    32.             public int compare(Object arg0, Object arg1) {
    33.                 Long key1 = Long.valueOf(((Map.Entry) arg0).getValue().toString());
    34.                 Long key2 = Long.valueOf(((Map.Entry) arg1).getValue().toString());
    35.                 return key1.compareTo(key2);
    36.             }
    37.         });
    38.         return entries;
    39.     }
    40. /**
    41.      * @param h
    42.      * @return
    43.      * 实现对map按照key排序
    44.      */
    45.     @SuppressWarnings("unchecked")
    46.     public static Map.Entry[] getSortedHashtableByKey(Map h) {
    47.         Set set = h.entrySet();
    48.         Map.Entry[] entries = (Map.Entry[]) set.toArray(new Map.Entry[set.size()]);
    49.         Arrays.sort(entries, new Comparator() {
    50.             public int compare(Object arg0, Object arg1) {
    51.                 Object key1 = ((Map.Entry) arg0).getKey();
    52.                 Object key2 = ((Map.Entry) arg1).getKey();
    53.                 return ((Comparable) key1).compareTo(key2);
    54.             }
    55.         });
    56.         return entries;
    57.     }
    58. }
    复制代码
    运行结果:
    C:        >java MapSort
    Nothing=30
    Ater=100
    Yier=150
    Zolo=330

    Ater-->100
    Nothing-->30
    Yier-->150
    Zolo-->330
      

      
      
       
       

         
       

         
       
      
    复制代码

    源码下载:http://file.javaxxz.com/2014/10/29/235621218.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-18 20:16 , Processed in 0.636368 second(s), 46 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表