• Java中Map类型数据使用LinkedHashMap保留数据的插入顺序


    场景

    Vue中JS遍历后台JAVA返回的Map数据,构造对象数组数据格式:

    https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/121567357

    在上面构造以时间为Key,以数量为value的数据格式时,查询一段时间内的数据后返回给前端,

    前端进行渲染成时间轴的柱状图。

    如果直接使用

    Map<String,Integer> resultMap = new new HashMap<String,Integer>();

    并且按照时间顺序记录每天的数据时,不会按照插入的数据记录。

    如果要按照插入的数据记录,需要使用

    Map<String,Integer> resultMap = new LinkedHashMap<String,Integer>();

    注:

    博客:
    https://blog.csdn.net/badao_liumang_qizhi
    关注公众号
    霸道的程序猿
    获取编程相关电子书、教程推送与免费下载。

    实现

    HashMap:

    最常用的Map,它根据键的HashCode值存储数据,根据键可以直接获取它的值,
    具有很快的访问速度,遍历时,取得数据的顺序是完全随机的。
    HashMap最多只允许一条记录的键为Null;允许多条记录的值为Null;
    HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap;
    可能会导致数据的不一致。如果需要同步,
    可以用Collections的synchronizedMap方法使HashMap具有同步的能力,
    或者使用ConcurrentHashMap。
    Hashtable与HashMap类似,它继承自Dictionary类,
    不同的是:它不允许记录的键或者值为空;它支持线程的同步,
    即任一时刻只有一个线程能写Hashtable,因此也导致了 Hashtable在写入时会比较慢。

    LinkedHashMap

    保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,
    先得到的记录肯定是先插入的.也可以在构造时用带参数,
    按照应用次数排序。在遍历的时候会比HashMap慢,
    不过有种情况例外,当HashMap容量很大,实际数据较少时,
    遍历起来可能会比LinkedHashMap慢,因为LinkedHashMap的遍历速度只和实际数据有关,
    和容量无关,而HashMap的遍历速度和他的容量有关。

    完整示例代码:

        public AjaxResult list(BusBlog busBlog)
        {
            BusBlog indexModel=new BusBlog();
            //构造返回数据,注意这里需要用LinkedHashMap
            Map<String,Integer> resultMap = new LinkedHashMap<String,Integer>();
            if(null!= busBlog.getBeginDate() && null!= busBlog.getEndDate()) {
                //获取请求参数,开始时间和结束时间
                indexModel.setBeginDate(busBlog.getBeginDate());
                indexModel.setEndDate(busBlog.getBeginDate());
                List<String> rangeData = new ArrayList<String>();
                //查询数据库获取指定时间内的数据
                rangeData = busBlogService.selectBlogCountByDate(busBlog);
                if (rangeData.size() >= 0) {
                    // 日期格式化
                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                    try {
                        // 起始日期
                        Date d1 = sdf.parse(busBlog.getBeginDate());
                        // 结束日期
                        Date d2 = sdf.parse(busBlog.getEndDate());
                        Date tmp = d1;
                        Calendar dd = Calendar.getInstance();
                        dd.setTime(d1);
                        while (tmp.getTime() < d2.getTime()) {
                            int dayCount = 0;
                            tmp = dd.getTime();
                            //获取查询的数据每天的档案数量
                            for (String oneDay:rangeData) {
                                Date oneDayDate = sdf.parse(oneDay);
                                if(oneDayDate.toString().equals(tmp.toString()))
                                {
                                    dayCount++;
                                }
                            }
                            resultMap.put(sdf.format(tmp),dayCount);
                            // 天数加上1
                            dd.add(Calendar.DAY_OF_MONTH, 1);
                        }
                        System.out.println(resultMap);
                    } catch (ParseException e) {
                        e.printStackTrace();
                    }
                }
            }
            return AjaxResult.success(resultMap);
        }
  • 相关阅读:
    加解密工具类(含keystore导出pfx)
    Java使用数字证书加密通信(加解密/加签验签)
    关于javax.crypto.BadPaddingException: Blocktype错误的几种解决方法
    产生定长的随机数
    数字证书生成--加密密/加签验签
    随机指定范围内N个不重复的数
    sql2012还原sql2008备份文件语句
    uploadify API
    海量数据处理分析
    .net经验积累
  • 原文地址:https://www.cnblogs.com/badaoliumangqizhi/p/15609344.html
Copyright © 2020-2023  润新知