zoukankan      html  css  js  c++  java
  • HashMap常用方法

    当需要对元素进行计数时,HashMap非常有用,如下例子,统计一个字符串中每个字符出现的次数:

    package simplejava;
    
    import java.util.HashMap;
    import java.util.Map.Entry;
    
    public class Q12 {
    
        public static void main(String[] args) {
            HashMap<Integer, Integer> countMap = new HashMap<Integer, Integer>();
            // .... a lot of a’s like the following
            
            String chars = "abcabcabcghgk";
            
            for(int i = 0; i < chars.length(); i++){
                int a = chars.charAt(i);
                if (countMap.keySet().contains(a)) {
                    countMap.put(a, countMap.get(a) + 1);
                } else {
                    countMap.put(a, 1);
                }
            }
            
            
            for(Entry<Integer, Integer> e : countMap.entrySet()){
                System.out.println((char)(int)e.getKey() + " " + e.getValue());
            }
    
        }
    
    }

    输出结果:

    g 2
    b 3
    c 3
    a 3
    k 1
    h 1

    HashMap遍历

            Map<Integer, Integer> mp = new HashMap<Integer, Integer>();
            Iterator it = mp.entrySet().iterator();
            while (it.hasNext()) {
                Map.Entry pairs = (Map.Entry) it.next();
                System.out.println(pairs.getKey() + " = " + pairs.getValue());
            }
            
            
            Map<Integer, Integer> map = new HashMap<Integer, Integer>();
            for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
                System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
            }

    打印HashMap的元素

        public static void printMap(Map mp) {
            Iterator it = mp.entrySet().iterator();
            while (it.hasNext()) {
                Map.Entry pairs = (Map.Entry) it.next();
                System.out.println(pairs.getKey() + " = " + pairs.getValue());
                it.remove(); // avoids a ConcurrentModificationException
            }
        }

    根据键值对的value排序

    以下代码往TreeMap的构造函数传入一个比较器,来对map进行排序:

    package simplejava;
    
    import java.util.Comparator;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.TreeMap;
    
    class ValueComparator implements Comparator<String> {
        Map<String, Integer> base;
    
        public ValueComparator(Map<String, Integer> base) {
            this.base = base;
        }
    
        public int compare(String a, String b) {
            if (base.get(a) >= base.get(b)) {
                return -1;
            } else {
                return 1;
            } // returning 0 would merge keys
        }
    }
    
    public class Q12 {
        public static void printMap(Map mp) {
            Iterator it = mp.entrySet().iterator();
            while (it.hasNext()) {
                Map.Entry pairs = (Map.Entry) it.next();
                System.out.println(pairs.getKey() + " = " + pairs.getValue());
                it.remove(); // avoids a ConcurrentModificationException
            }
        }
    
        public static void main(String[] args) {
            HashMap<String, Integer> countMap = new HashMap<String, Integer>();
            // add a lot of entries
            countMap.put("a", 10);
            countMap.put("b", 20);
            ValueComparator vc = new ValueComparator(countMap);
            TreeMap<String, Integer> sortedMap = new TreeMap<String, Integer>(vc);
            sortedMap.putAll(countMap);
            printMap(sortedMap);
    
        }
    
    }

    虽然有很多种方法来对HashMap进行排序,但以上这种方法在stackoverflow中是最被推崇的;

    注:使用了一个比较器Comparator对TreeMap排序,该比较器比较key的方式是取出key对应的value进行大小比较;

    译文地址:http://www.programcreek.com/2013/04/frequently-used-methods-of-java-hashmap/

  • 相关阅读:
    jquery-5 jQuery筛选选择器
    百度富文本编辑器ueditor使用启示
    前端开发思路
    世界硬币:比特币类似的评分系统!
    百度面试题 号码找到符合条件
    彩色图像--色彩空间 YIQ 、YUV 、YCbCr 、YC1C2 和I1I2I3
    HDU 4915 Parenthese sequence
    Visual FoxPro 6.0~9.0解决方案和实例文档和CD写入原件下载
    DWR入门的例子(一个)
    写自己的第二级处理器(3)——Verilog HDL行为语句
  • 原文地址:https://www.cnblogs.com/chenpi/p/5493678.html
Copyright © 2011-2022 走看看