Java Map的遍历与排序

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

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

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

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

  • Map.Entry 返回 Collections 视图。

Map的遍历

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

    // 创建一个HashMap
    HashMap<String, Integer> hashMap = new HashMap<>();
    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 进行排序

    1 key 升序

    // 创建一个TreeMap,它的Key默认升序
    TreeMap<String, Integer> treeMap = new TreeMap<>();
    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
    

    2 key 降序

    // key降序,创建TreeMap时给一个比较器参数
    TreeMap<String, Integer> treeMap1 = new TreeMap<>(
        new Comparator<String>() {
            @Override
            public int compare(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 进行排序

    1 value 升序

    // 对TreeMap的value排序,升序
    // 将Map的entry放入List中,然后排序
    ArrayList<Map.Entry<String, Integer>> list = new ArrayList<>(treeMap.entrySet());
    Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
        @Override
        public int compare(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
    

    2 value 降序

    // 对TreeMap的value排序,降序
    ArrayList<Map.Entry<String, Integer>> list1 = new ArrayList<>(treeMap.entrySet());
    Collections.sort(list1, new Comparator<Map.Entry<String, Integer>>() {
        @Override
        public int compare(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
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值