黑马程序员技术交流社区
标题:
如何对TreeMap的值进行排序?
[打印本页]
作者:
CoeusLYJ
时间:
2015-5-7 15:13
标题:
如何对TreeMap的值进行排序?
本帖最后由 CoeusLYJ 于 2015-5-11 15:04 编辑
TreeMap拥有默认排序与定义排序,但是貌似只能对键进行排序,而不能对值进行排序?求解决方案。
作者:
CoeusLYJ
时间:
2015-5-8 23:38
求大神解答~~~
作者:
wkz_crystal
时间:
2015-5-9 00:15
<font size="3">/*
可以对map中的值进行排序哈,请看下面我写的例子
*/
import java.util.*;
class Demo1
{
public static void main(String[] args)
{
Map<String,Integer> mp= new HashMap<String,Integer>();
mp.put("A", 65);
mp.put("B", 43);
mp.put("C", 26);
mp.put("D", 20);
mp.put("E", 110);
mapSort(mp); //排序前list:[D=23, E=85, A=98, B=50, C=76]
}
//按照值排序的方法
public static void mapSort(Map<String,Integer> mp)
{
//简单的思想就是拿到键值对(Set集合)再存入list集合中去:
List<Map.Entry<String,Integer>> list = new ArrayList<Map.Entry<String,Integer>>(mp.entrySet());
System.out.println("排序前\t"+list);
Collections.sort(list,new MyCompl()); //自定义比较器排序
System.out.println("排序后\t"+list);
}
}
//按照值来进行排序的自定义比较器
class MyCompl implements Comparator<Map.Entry<String,Integer>>
{
public int compare(Map.Entry<String, Integer> me1,Map.Entry<String, Integer> me2)
{
int num=me1.getValue().compareTo(me2.getValue());
if (num==0) //如果值一样,就按照键来排序
return me1.getKey().compareTo(me2.getKey());
return num;
}
}
/*结果
排序前 [D=20, E=110, A=65, B=43, C=26]
排序后 [D=20, C=26, B=43, A=65, E=110]
*/</font>
复制代码
作者:
wkz_crystal
时间:
2015-5-9 00:16
wkz_crystal 发表于 2015-5-9 00:15
没有做不到,只有想不到哈!但是想的东西必须得符合一定的逻辑才行!是吧?
作者:
弯曲/mg抛物☀
时间:
2015-5-9 07:57
可以有两种排序,存入的对象实现comparable接口,或Map<String,Integer> mp= new HashMap<String,Integer>(new MyCompl());传入一个比较器。
作者:
CoeusLYJ
时间:
2015-5-11 15:04
wkz_crystal 发表于 2015-5-9 00:15
非常感谢!!!原来可以这样做,真的没有想到。。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2