zoukankan      html  css  js  c++  java
  • 遍历Map的两种方法(有排序)

    初始化一个map

    Map<String, String> map = new HashMap<String, String>();
    map.put("1", "hell");
    map.put("2", "hello");
    map.put("3", "hel");
    map.put("4", "hello");
    

    1、第一种方式,普遍使用

    Set<String> keySet = map.keySet();
    for (String key : keySet) { 
        System.out.println("key= " + key + " and value= " + map.get(key));
    }
    

     2、第二种方式,容量大时推荐使用

    Set<Map.Entry<String,String>> entySet =  map.entrySet();
    for (Map.Entry<String, String> entry : entySet) {
    	System.out.println("key= " + entry.getKey() + " and value= "
    			+ entry.getValue());
    }
    

     实验发现输出的顺序是乱的,排个序吧

    1、按照key值排序

    首先写个排序类

    private static class KeyComparator implements
            Comparator<Map.Entry<String, String>> {
        public int compare(Map.Entry<String, String> m,
                Map.Entry<String, String> n) {
            return m.getKey().compareTo(n.getKey());
        }
    }
    

     把数据放在list里边才可以使用

    List<Map.Entry<String, String>> list = new ArrayList<Map.Entry<String, String>>();
    list.addAll(map.entrySet());
    
    KeyComparator kc = new KeyComparator();
    Collections.sort(list, kc);
    for (Iterator<Map.Entry<String, String>> it = list.iterator(); it
            .hasNext();) {
        System.out.println(it.next());
    }
    

     2、按照Value值排序

    private static class ValueComparator implements
            Comparator<Map.Entry<String, String>> {
        public int compare(Map.Entry<String, String> m,
                Map.Entry<String, String> n) {
            return m.getValue().compareTo(n.getValue());
        }
    }
    

     排序输出

    list.clear();
    list.addAll(map.entrySet());
    ValueComparator vc = new ValueComparator();
    Collections.sort(list, vc);
    for (Iterator<Map.Entry<String, String>> it = list.iterator(); 
        it.hasNext();) {
        System.out.println(it.next());
    }
    

    Tips: 如有错误请指出,我会及时修改

     

     

  • 相关阅读:
    栈:逆波兰表达式(后缀表达式)
    栈:实现综合计算器(中缀表达式)
    栈:数组模拟栈
    链表(Linked List):单向环形链表
    单链表常见面试题
    链表(Linked List):双向链表
    链表(Linked List): 单链表
    队列和环形队列
    稀疏数组
    Linux命令--pushd和popd
  • 原文地址:https://www.cnblogs.com/pear-lemon/p/4536152.html
Copyright © 2011-2022 走看看