zoukankan      html  css  js  c++  java
  • Map.Entry

    实例如下:

    public String getReportURL() throws Exception {
            String reportURL = parameterMap.get("showPageUrl").toString() + "showPageNum=1";
            Iterator it = parameterMap.entrySet().iterator();
            while (it.hasNext()) {
                Map.Entry entry = (Map.Entry) it.next();
                Object keyObj = entry.getKey();
                Object valObj = entry.getValue();
                if (keyObj != null && keyObj.toString().length() > 0 && valObj != null && valObj.toString().length() > 0) {
                    String key = keyObj.toString();
                    String val = valObj.toString();
                    if (!"showPageNum".equals(key))
                        reportURL += "&" + URLEncoder.encode(key, "gb2312") + "=" + URLEncoder.encode(val, "gb2312");
                }
            }
            return reportURL;
        }

     Map类提供了一个称为entrySet()的方法,这个方法返回一个Map.Entry实例化后的对象集。 接着,Map.Entry类提供了一个getKey()方法和一个getValue()方法

     

    同时,提供给开发人员一个同时保持了关键字和其对应的值的类。Map.Entry同时也提供了一个setValue()方法,程序员可以使用它修改map里面的值。

    map内部是按照hash算法存储的,但如果能对map排序在某些时候还是有用的

    /**
         * @param h
         * @return
         * 实现对map按照value升序排序
         */
        @SuppressWarnings("unchecked")
        public static Map.Entry[] getSortedHashtableByValue(Map h) {
            Set set = h.entrySet();
            Map.Entry[] entries = (Map.Entry[]) set.toArray(new Map.Entry[set .size()]);
            Arrays.sort(entries, new Comparator() {
                public int compare(Object arg0, Object arg1) {
                    Long key1 = Long.valueOf(((Map.Entry) arg0).getValue().toString());
                    Long key2 = Long.valueOf(((Map.Entry) arg1).getValue().toString());
                    return key1.compareTo(key2);
                }
            });

            return entries;
        }

    /**
         * @param h
         * @return
         * 实现对map按照key排序
         */
        @SuppressWarnings("unchecked")
        public static Map.Entry[] getSortedHashtableByKey(Map h) {

            Set set = h.entrySet();

            Map.Entry[] entries = (Map.Entry[]) set.toArray(new Map.Entry[set.size()]);

            Arrays.sort(entries, new Comparator() {
                public int compare(Object arg0, Object arg1) {
                    Object key1 = ((Map.Entry) arg0).getKey();
                    Object key2 = ((Map.Entry) arg1).getKey();
                    return ((Comparable) key1).compareTo(key2);
                }

            });

            return entries;
        }

     

     

     

    Map的keySet方法

    2008-07-12 10:44

     

    有一个Map对象,这时候使用keySet()方法获取所有的key值,比如:

       Map map = new HashMap();

       map.put(1, "a");

       map.put(2, "b");

       map.put(3, "c");

       map.put(4, "d");

       Set keys1 = map.keySet();

       Set keys2 = map.keySet();

       Set keys3 = map.keySet();

    上面三个set对象key1,key2,key3引用的是一个对象。这是map的keySet()方法只返回一个set实例,所以当从key1中删除一个对象时候,key2和key3将会受到影响。

       keys1.remove(1);

       System.out.println(keys1);

       System.out.println(keys2);

       System.out.println(keys3);

    打印结果为:

    [2, 4, 3]

    [2, 4, 3]

    [2, 4, 3]

     

    在使用map时有时会出现此类的错误

        java.util.ConcurrentModificationException 

     

    在执行如下 代码时会出此错误:

      Set<String> keySet=map.keySet();

    for(String key:keySet){

        map.remove(key);

    }

    原因是删除一个Entry之后keySet集合不对,在执行循环时会出现错误。将代码改为如下则能解决此问题:

    String[]  keySet=map.keySet().toArray(new String[0])

    for(String key:keySet){

        map.remove(key);

    }

     

    因为加了toArray所以新的集合和原来的keySet就没有了关系,所以也就不会出错了

  • 相关阅读:
    数据库访问性能优化(转)
    Mysql分表和分区的区别、分库分表介绍与区别
    怎样玩转千万级别的数据(表分区)
    关于Blocking IO,non-Blokcing IO,async IO的区别和理解
    spring security四种实现方式
    使用百度网盘+Git,把版本控制托管到云端,附精彩评论
    Linux下C/C++帮助手册安装方法
    GNU自动化工具使用全过程详解,以及在线手册
    autotools工具使用 good
    使用 GNU Libtool 创建库
  • 原文地址:https://www.cnblogs.com/zheh/p/3894634.html
Copyright © 2011-2022 走看看