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

Java中Map类型数据使用LinkedHashMap保留数据的插入顺序,第1张

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

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

Vue中JS遍历后台JAVA返回的Map数据,构造对象数组数据格式_BADAO_LIUMANG_QIZHI的博客-CSDN博客

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

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

如果直接使用

Map resultMap = new new HashMap();

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

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

Map resultMap = new linkedHashMap();

注:

博客:
BADAO_LIUMANG_QIZHI的博客_霸道流氓气质_CSDN博客-C#,SpringBoot,架构之路领域博主
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。

实现

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 resultMap = new linkedHashMap();
        if(null!= busBlog.getBeginDate() && null!= busBlog.getEndDate()) {
            //获取请求参数,开始时间和结束时间
            indexModel.setBeginDate(busBlog.getBeginDate());
            indexModel.setEndDate(busBlog.getBeginDate());
            List rangeData = new ArrayList();
            //查询数据库获取指定时间内的数据
            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);
    }

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5612811.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存