zoukankan      html  css  js  c++  java
  • 对HashMap进行排序

    首先来看看Map集合获取元素的三种常见方法keySet()、values()、entrySet()

    1. values():返回map集合的所有value的Collection集合(于集合中无序存放)

     1 import java.util.*;
     2 
     3 public class Main{
     4     public static void main(String[] args){
     5         Map<String, String> map = new HashMap<String, String>();    //构建键值对为<String, String>的Map集合
     6         map.put("a", "aaa");
     7         map.put("b", "bbb");
     8         map.put("c", "ccc");
     9     
    10         Collection<String> collection = map.values();    //获取map集合的所有value的Collection集合(于集合中无序存放)
    11         System.out.println(collection);
    12     }
    13 }
    14 
    15 /**
    16  * 运行结果
    17  * [bbb, ccc, aaa]
    18  */

    2. keySet():返回map集合的所有键的Set集合(于Set集合中无序存放)

    通过迭代取出所有key,再利用get()方法获取value, for(类型 元素: 集合) 的本质是获取集合的迭代器进行迭代

     1 import java.util.*;
     2  
     3 public class Main{
     4     public static void main(String[] args){
     5         Map<String, String> map = new HashMap<String, String>();    //构建键值对为<String, String>的Map集合
     6         map.put("a", "aaa");
     7         map.put("b", "bbb");
     8         map.put("c", "ccc");
     9         
    10         Set<String> keySet = map.keySet();    //获取map集合的所有键的Set集合(于Set集合中无序存放)
    11         Iterator<String> iter = keySet.iterator();    //获取keySet集合的迭代器
    12         while(iter.hasNext()){
    13             String key = iter.next();
    14             String value = map.get(key);
    15             System.out.println("key:" + key + "-->value:" + value);
    16         }
    17         /*
    18         for(String key: keySet){
    19             String value = map.get(key);
    20             System.out.println("key:" + key + "-->value:" + value);
    21         }
    22         */
    23     }
    24 }
    25 
    26 /**
    27  * 运行结果
    28  * key:b-->value:bbb
    29  * key:c-->value:ccc
    30  * key:a-->value:aaa
    31  */

    3. entrySet():返回map集合的所有"映射"的Set集合,这里规范每个"映射"的类型为Map.Entry<K, V>(于Set集合中无序存放)

    通过迭代取出所有的“映射”,再利用getKey()、getValue()方法获取相应键、值

     1 import java.util.*;
     2 
     3 public class Main{
     4     public static void main(String[] args){
     5         Map<String, String> map = new HashMap<String, String>();    //构建键值对为<String, String>的Map集合
     6         map.put("a", "aaa");
     7         map.put("b", "bbb");
     8         map.put("c", "ccc");
     9     
    10         Set<Map.Entry<String, String>> entrySet = map.entrySet();    //获取map集合的所有"映射"的Set集合,这里规范每个映射的类型为Map.Entry<K, V>(于Set集合中无序存放)
    11         Iterator<Map.Entry<String, String>> iter = entrySet.iterator();    //获取entrySet集合的迭代器,Map.Entry<K, V>为迭代元素的类型
    12         while(iter.hasNext()){
    13             Map.Entry<String, String> item = iter.next();
    14             String key = item.getKey();
    15             String value = item.getValue();
    16             System.out.println("key:" + key + "-->value:" + value);
    17         }
    18         /*
    19         for(Map.Entry<String, String> item: entrySet){
    20             String key = item.getKey();
    21             String value = item.getValue();
    22             System.out.println("key:" + key + "-->value:" + value);
    23         }
    24         */
    25     }
    26 }
    27 
    28 /**
    29  * 运行结果
    30  * key:b-->value:bbb
    31  * key:c-->value:ccc
    32  * key:a-->value:aaa
    33  */

    有以上方法作为基础,那么我们很容易想到对HashMap进行排序的两种方法

    1. 通过keySet()获取Map集合的所有键的Set集合,由List集合获取其中所有元素,通过比较器对元素为键的List集合进行排序

    2. 通过entrySet()获取Map集合所有映射的Set集合,由List集合获取其中所有元素,通过比较器对元素为"映射"List集合进行排序

    通过对比较器compare方法的Override,两者还可以实现利用value进行排序。有关java中Comparable和Comparator比较的详解

     1 import java.util.*;
     2 
     3 public class DescKeyComparator implements Comparator<String>{
     4     public static void main(String[] args){
     5         Map<String, String> map = new HashMap<String, String>();    //构建键值对为<String, String>的Map集合
     6         map.put("a", "aaa");
     7         map.put("b", "bbb");
     8         map.put("c", "ccc");
     9     
    10         Set<String> entrySet = map.keySet();    //获取map集合的所有键的Set集合(于Set集合中无序存放)
    11         List<String> list = new ArrayList<String>(entrySet);    //新建List集合获取Set集合的所有元素(键对象)(顺序与Set集合一样)
    12         /** 
    13          * 接下来的排序是list的专长了
    14          * 通过“比较器(DescKeyComparator)”,对list进行排序
    15          */
    16         Collections.sort(list, new DescKeyComparator());
    17         /*
    18         Collections.sort(list);    //String实现了Comparable,默认升序排列
    19         */
    20         Iterator<String> iter = list.iterator();    //获取List集合的迭代器,String为迭代元素的类型
    21         while(iter.hasNext()){
    22             String key = iter.next();
    23             String value = map.get(key);
    24             System.out.println("key:" + key + "-->value:" + value);
    25         }
    26         /*
    27         for(Map.Entry<String, String> item: list){
    28             String key = iter.next();
    29             String value = map.get(key);
    30             System.out.println("key:" + key + "-->value:" + value);
    31         }
    32         */
    33     }
    34     
    35     @Override
    36     public int compare(String key1, String key2){
    37         return key2.compareTo(key1);    //降序排序; String作为api提供的类,实现了Comparable的compareTo方法被设计成小于、等于、大于分别返回负数、零、正数
    38     }
    39 }
    40 
    41 /**
    42  * 运行结果
    43  * key:c-->value:ccc
    44  * key:b-->value:bbb
    45  * key:a-->value:aaa
    46  */
     1 import java.util.*;
     2 
     3 public class AscKeyComparator implements Comparator<Map.Entry<String, String>>{
     4     public static void main(String[] args){
     5         Map<String, String> map = new HashMap<String, String>();    //构建键值对为<String, String>的Map集合
     6         map.put("a", "aaa");
     7         map.put("b", "bbb");
     8         map.put("c", "ccc");
     9     
    10         Set<Map.Entry<String, String>> entrySet = map.entrySet();    //获取map集合的所有"映射"的Set集合,这里规范每个映射的类型为Map.Entry<K, V>(于Set集合中无序存放)
    11         List<Map.Entry<String, String>> list = new ArrayList<Map.Entry<String, String>>(entrySet);    //新建List集合获取Set集合的所有元素("映射"对象)(顺序与Set集合一样)
    12         /** 
    13          * 接下来的排序是list的专长了
    14          * 通过“比较器(AscKeyComparator)”,对list进行排序
    15          */
    16         Collections.sort(list, new AscKeyComparator());
    17         
    18         Iterator<Map.Entry<String, String>> iter = list.iterator();    //获取List集合的迭代器,Map.Entry<K, V>为迭代元素的类型
    19         while(iter.hasNext()){
    20             Map.Entry<String, String> item = iter.next();
    21             String key = item.getKey();
    22             String value = item.getValue();
    23             System.out.println("key:" + key + "-->value:" + value);
    24         }
    25         /*
    26         for(Map.Entry<String, String> item: list){
    27             String key = item.getKey();
    28             String value = item.getValue();
    29             System.out.println("key:" + key + "-->value:" + value);
    30         }
    31         */
    32     }
    33     
    34     @Override
    35     public int compare(Map.Entry<String, String> item1, Map.Entry<String, String> item2){
    36         return item1.getKey().compareTo(item2.getKey());    //升序排序
    37     }
    38 }
    39 
    40 /**
    41  * 运行结果
    42  * key:a-->value:aaa
    43  * key:b-->value:bbb
    44  * key:c-->value:ccc
    45  */
  • 相关阅读:
    何为受控组件(controlled component)
    (组件的)状态(state)和属性(props)之间有何不同
    类组件(Class component)和函数式组件(Functional component)之间有何不同
    [翻译] FSLineChart
    [翻译] DXPopover
    [翻译] LTInfiniteScrollView
    设计模式
    [翻译] LLSimpleCamera
    [翻译] VLDContextSheet
    将Model对象转换成json文本或者json二进制文件
  • 原文地址:https://www.cnblogs.com/zzzz76/p/6891698.html
Copyright © 2011-2022 走看看