A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© CoeusLYJ 中级黑马   /  2015-5-7 15:13  /  1890 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 CoeusLYJ 于 2015-5-11 15:04 编辑

TreeMap拥有默认排序与定义排序,但是貌似只能对键进行排序,而不能对值进行排序?求解决方案。

评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1

查看全部评分

5 个回复

倒序浏览
求大神解答~~~
回复 使用道具 举报
  1. <font size="3">/*
  2.         可以对map中的值进行排序哈,请看下面我写的例子
  3. */
  4. import java.util.*;
  5. class Demo1
  6. {
  7.         public static void main(String[] args)
  8.         {
  9.                 Map<String,Integer> mp= new HashMap<String,Integer>();
  10.                 mp.put("A", 65);
  11.                 mp.put("B", 43);
  12.                 mp.put("C", 26);
  13.                 mp.put("D", 20);
  14.                 mp.put("E", 110);

  15.                 mapSort(mp); //排序前list:[D=23, E=85, A=98, B=50, C=76]
  16.         }

  17.         //按照值排序的方法
  18.         public static void mapSort(Map<String,Integer> mp)
  19.         {
  20.                 //简单的思想就是拿到键值对(Set集合)再存入list集合中去:
  21.                 List<Map.Entry<String,Integer>> list = new ArrayList<Map.Entry<String,Integer>>(mp.entrySet());
  22.                 System.out.println("排序前\t"+list);
  23.                
  24.                 Collections.sort(list,new MyCompl()); //自定义比较器排序
  25.                 System.out.println("排序后\t"+list);
  26.         }
  27. }

  28. //按照值来进行排序的自定义比较器
  29. class MyCompl implements Comparator<Map.Entry<String,Integer>>
  30. {
  31.         public int compare(Map.Entry<String, Integer> me1,Map.Entry<String, Integer> me2)
  32.         {
  33.                 int num=me1.getValue().compareTo(me2.getValue());
  34.                 if (num==0) //如果值一样,就按照键来排序
  35.                         return me1.getKey().compareTo(me2.getKey());
  36.                 return num;
  37.         }
  38. }

  39. /*结果
  40.         排序前  [D=20, E=110, A=65, B=43, C=26]
  41.         排序后  [D=20, C=26, B=43, A=65, E=110]
  42. */</font>
复制代码


评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1

查看全部评分

回复 使用道具 举报

没有做不到,只有想不到哈!但是想的东西必须得符合一定的逻辑才行!是吧?
回复 使用道具 举报
可以有两种排序,存入的对象实现comparable接口,或Map<String,Integer> mp= new HashMap<String,Integer>(new MyCompl());传入一个比较器。
回复 使用道具 举报

非常感谢!!!原来可以这样做,真的没有想到。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马