Java Map的遍历与排序

2022年6月6日13:39:41

Map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等。

  • TreeMap:基于红黑树实现,该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的Comparator 进行排序。

  • HashMap 的值是没有顺序的,它是按照keyHashCode 来实现的,对于这个无序的HashMap 的排序参照TreeMapvalue 排序。

  • LinkedHashMap 是HashMap 的一个子类,它的输出顺序与输入顺序相同。

  • Map.Entry 返回Collections 视图。

Map的遍历

  • 方法一:键找值,通过元素的键,获取对应的值。

    // 创建一个HashMap
    HashMap<String, Integer> hashMap=newHashMap<>();
    hashMap.put("lihaogn",8);
    hashMap.put("zhangsan",7);
    hashMap.put("wanger",9);// 遍历map方式一
    Set<String> keySet= hashMap.keySet();
    Iterator<String> iterator= keySet.iterator();while(iterator.hasNext()){
        String key= iterator.next();
        Integer value= hashMap.get(key);
        System.out.println(key+":"+ value);}// lihaogn:8// zhangsan:7// wanger:9
  • 方式二:键值对方式,通过集合中每个键值对对象,获取键值对对象中的键与值。

    // 遍历map方式二for(Map.Entry<String, Integer> entry: hashMap.entrySet()){
        String key= entry.getKey();
        Integer value= entry.getValue();
        System.out.println(key+":"+ value);}// lihaogn:8// zhangsan:7// wanger:9

Map的排序

  • Mapkey 进行排序

    1key 升序

    // 创建一个TreeMap,它的Key默认升序
    TreeMap<String, Integer> treeMap=newTreeMap<>();
    treeMap.put("lihaogn",5);
    treeMap.put("zhangsan",3);
    treeMap.put("wanger",6);for(Map.Entry<String, Integer> entry: treeMap.entrySet()){
        String key= entry.getKey();
        Integer value= entry.getValue();
        System.out.println(key+":"+ value);}// lihaogn:5// wanger:6// zhangsan:3

    2key 降序

    // key降序,创建TreeMap时给一个比较器参数
    TreeMap<String, Integer> treeMap1=newTreeMap<>(newComparator<String>(){@Overridepublicintcompare(String o1, String o2){return o2.compareTo(o1);}});
    treeMap1.put("lihaogn",5);
    treeMap1.put("zhangsan",3);
    treeMap1.put("wanger",6);for(Map.Entry<String, Integer> entry: treeMap1.entrySet()){
        String key= entry.getKey();
        Integer value= entry.getValue();
        System.out.println(key+":"+ value);}// zhangsan:3// wanger:6// lihaogn:5
  • Mapvalue 进行排序

    1value 升序

    // 对TreeMap的value排序,升序// 将Map的entry放入List中,然后排序
    ArrayList<Map.Entry<String, Integer>> list=newArrayList<>(treeMap.entrySet());
    Collections.sort(list,newComparator<Map.Entry<String, Integer>>(){@Overridepublicintcompare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2){return o1.getValue().compareTo(o2.getValue());}});for(Map.Entry<String, Integer> entry: list){
        System.out.println(entry.getKey()+":"+ entry.getValue());}// zhangsan:3// lihaogn:5// wanger:6

    2value 降序

    // 对TreeMap的value排序,降序
    ArrayList<Map.Entry<String, Integer>> list1=newArrayList<>(treeMap.entrySet());
    Collections.sort(list1,newComparator<Map.Entry<String, Integer>>(){@Overridepublicintcompare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2){return o2.getValue().compareTo(o1.getValue());}});for(Map.Entry<String, Integer> entry: list1){
        System.out.println(entry.getKey()+":"+ entry.getValue());}// wanger:6// lihaogn:5// zhangsan:3
  • 作者:豪华手抓饼
  • 原文链接:https://blog.csdn.net/lihaogn/article/details/100811412
    更新时间:2022年6月6日13:39:41 ,共 2570 字。