zoukankan      html  css  js  c++  java
  • Java Map按键(Key)排序和按值(Value)排序

    Map排序的方式有很多种,两种比较常用的方式:按键排序(sort by key), 按值排序(sort by value)。
    1、按键排序
    jdk内置的java.util包下的TreeMap<K,V>既可满足此类需求,向其构造方法 TreeMap(Comparator<? super K> comparator)  传入我们自定义的比较器即可实现按键排序。

    Java代码  收藏代码
    1. public class MapSortDemo {  
    2.     public static void main(String[] args) {  
    3.         Map<String, String> map = new TreeMap<String, String>();  
    4.         map.put("KFC", "kfc");  
    5.         map.put("WNBA", "wnba");  
    6.         map.put("NBA", "nba");  
    7.         map.put("CBA", "cba");  
    8.         Map<String, String> resultMap = sortMapByKey(map);    //按Key进行排序  
    9.         for (Map.Entry<String, String> entry : resultMap.entrySet()) {  
    10.             System.out.println(entry.getKey() + " " + entry.getValue());  
    11.         }  
    12.     }  
    13.       
    14.     /** 
    15.      * 使用 Map按key进行排序 
    16.      * @param map 
    17.      * @return 
    18.      */  
    19.     public static Map<String, String> sortMapByKey(Map<String, String> map) {  
    20.         if (map == null || map.isEmpty()) {  
    21.             return null;  
    22.         }  
    23.         Map<String, String> sortMap = new TreeMap<String, String>(new MapKeyComparator());  
    24.         sortMap.putAll(map);  
    25.         return sortMap;  
    26.     }  
    27. }  
    28.   
    29. //比较器类  
    30. public class MapKeyComparator implements Comparator<String>{  
    31.     public int compare(String str1, String str2) {  
    32.         return str1.compareTo(str2);  
    33.     }  
    34. }  

     2、按值排序
    按值排序就相对麻烦些了,貌似没有直接可用的数据结构能处理类似需求,需要我们自己转换一下。
    Map本身按值排序是很有意义的,很多场合下都会遇到类似需求,可以认为其值是定义的某种规则或者权重。

    原理:将待排序Map中的所有元素置于一个列表中,接着使用Collections的一个静态方法 sort(List<T> list, Comparator<? super T> c) 
    来排序列表,同样是用比较器定义比较规则。排序后的列表中的元素再依次装入Map,为了肯定的保证Map中元素与排序后的List中的元素的顺序一致,使用了LinkedHashMap数据类型。

    Java代码  收藏代码
      1. 实现代码  
      2.   
      3. public class MapSortDemo {  
      4.     public static void main(String[] args) {  
      5.         Map<String, String> map = new TreeMap<String, String>();  
      6.         map.put("KFC", "kfc");  
      7.         map.put("WNBA", "wnba");  
      8.         map.put("NBA", "nba");  
      9.         map.put("CBA", "cba");  
      10.         Map<String, String> resultMap = sortMapByValue(map); //按Value进行排序  
      11.         for (Map.Entry<String, String> entry : resultMap.entrySet()) {  
      12.             System.out.println(entry.getKey() + " " + entry.getValue());  
      13.         }  
      14.     }  
      15.       
      16.     /** 
      17.      * 使用 Map按value进行排序 
      18.      * @param map 
      19.      * @return 
      20.      */  
      21.     public static Map<String, String> sortMapByValue(Map<String, String> map) {  
      22.         if (map == null || map.isEmpty()) {  
      23.             return null;  
      24.         }  
      25.         Map<String, String> sortedMap = new LinkedHashMap<String, String>();  
      26.         List<Map.Entry<String, String>> entryList = new ArrayList<Map.Entry<String, String>>(map.entrySet());  
      27.         Collections.sort(entryList, new MapValueComparator());  
      28.         Iterator<Map.Entry<String, String>> iter = entryList.iterator();  
      29.         Map.Entry<String, String> tmpEntry = null;  
      30.         while (iter.hasNext()) {  
      31.             tmpEntry = iter.next();  
      32.             sortedMap.put(tmpEntry.getKey(), tmpEntry.getValue());  
      33.         }  
      34.         return sortedMap;  
      35.     }  
      36. }  
      37.   
      38. //比较器类  
      39. public class MapValueComparator implements Comparator<Map.Entry<String, String>> {  
      40.     public int compare(Entry<String, String> me1, Entry<String, String> me2) {  
      41.         return me1.getValue().compareTo(me2.getValue());  
      42.     }  
      43. }  
  • 相关阅读:
    Day2-Python爬虫小练 爬取百科词条
    Day1-python轻量级爬虫
    大数据处理课堂测试1
    周记7-28
    周记7-21
    周记7-14
    软件工程课程总结
    进度15
    NABCD
    团队项目成员和题目
  • 原文地址:https://www.cnblogs.com/yver/p/6009048.html
Copyright © 2011-2022 走看看