Java TreeMap升序|降序排列和按照value进行排序的案例
TreeMap升序|降序排列
importjava.util.Comparator;
importjava.util.TreeMap;
publicclassMain{
publicstaticvoidmain(String[]args){
TreeMapmap1=newTreeMap();//默认的TreeMap升序排列
TreeMapmap2=newTreeMap(newComparator(){
/*
*intcompare(Objecto1,Objecto2)返回一个基本类型的整型,
*返回负数表示:o1小于o2,
*返回0表示:o1和o2相等,
*返回正数表示:o1大于o2。
*/
publicintcompare(Integera,Integerb){
returnb-a;
}
});
map2.put(1,2);
map2.put(2,4);
map2.put(7,1);
map2.put(5,2);
System.out.println("Map2="+map2);
map1.put(1,2);
map1.put(2,4);
map1.put(7,1);
map1.put(5,2);
System.out.println("map1="+map1);
}
}
TreeMap按照value进行排序
TreeMap底层是根据红黑树的数据结构构建的,默认是根据key的自然排序来组织(比如integer的大小,String的字典排序)。所以,TreeMap只能根据key来排序,是不能根据value来排序的(否则key来排序根本就不能形成TreeMap)。
今天有个需求,就是要根据treeMap中的value排序。所以网上看了一下,大致的思路是把TreeMap的EntrySet转换成list,然后使用Collections.sor排序。
代码:
publicstaticvoidsortByValue(){
Mapmap=newTreeMap();
map.put("a","dddd");
map.put("d","aaaa");
map.put("b","cccc");
map.put("c","bbbb");
List>list=newArrayList>(map.entrySet());
Collections.sort(list,newComparator>(){
//升序排序
publicintcompare(Entryo1,Entryo2){
returno1.getValue().compareTo(o2.getValue());
}
});
for(Entrye:list){
System.out.println(e.getKey()+":"+e.getValue());
}
}
补充知识:使用比较器对Treemap按照value进行排序
使用比较器对Treemap按照value进行排序(value值只有是string类型时才适用)
有时我们需要根据TreeMap的value来进行排序。对value排序我们就需要借助于Collections的sort(Listlist,Comparator
publicclassMapSortDemo{
publicstaticvoidmain(String[]args){
Mapmap=newTreeMap();
map.put("KFC","kfc");
map.put("WNBA","wnba");
map.put("NBA","nba");
map.put("CBA","cba");
MapresultMap=sortMapByKey(map);//按Key进行排序
//MapresultMap=sortMapByValue(map);//按Value进行排序
for(Map.Entryentry:resultMap.entrySet()){
System.out.println(entry.getKey()+""+entry.getValue());
}
}
/**
*使用Map按value进行排序
*@parammap
*@return
*/
publicstaticMapsortMapByValue(MaporiMap){
if(oriMap==null||oriMap.isEmpty()){
returnnull;
}
MapsortedMap=newLinkedHashMap();
List>entryList=newArrayList>(
oriMap.entrySet());
Collections.sort(entryList,newMapValueComparator());
Iterator>iter=entryList.iterator();
Map.EntrytmpEntry=null;
while(iter.hasNext()){
tmpEntry=iter.next();
sortedMap.put(tmpEntry.getKey(),tmpEntry.getValue());
}
returnsortedMap;
}
}
//比较器 classMapValueComparatorimplementsComparator>{ @Override publicintcompare(Entry me1,Entry me2){ returnme1.getValue().compareTo(me2.getValue()); } }
方式二
publicclassTreeMapTest{
publicstaticvoidmain(String[]args){
Mapmap=newTreeMap();
map.put("a","ddddd");
map.put("c","bbbbb");
map.put("d","aaaaa");
map.put("b","ccccc");
//这里将map.entrySet()转换成list
List>list=newArrayList>(map.entrySet());
//然后通过比较器来实现排序
Collections.sort(list,newComparator>(){
//升序排序
publicintcompare(Entryo1,
Entryo2){
returno1.getValue().compareTo(o2.getValue());
}
});
for(Map.Entrymapping:list){
System.out.println(mapping.getKey()+":"+mapping.getValue());
}
}
}
运行结果如下:
d:aaaaa
c:bbbbb
b:ccccc
a:ddddd
以上这篇JavaTreeMap升序|降序排列和按照value进行排序的案例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。