首页 > 编程语言 >Java中Map类型数据使用LinkedHashMap保留数据的插入顺序

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

时间:2023-03-24 15:37:39浏览次数:41  
标签:Map 遍历 Java HashMap busBlog new LinkedHashMap


场景

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

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

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

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

如果直接使用

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

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

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

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

注:

博客:BADAO_LIUMANG_QIZHI的博客_霸道流氓气质_-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<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);
    }

标签:Map,遍历,Java,HashMap,busBlog,new,LinkedHashMap
From: https://blog.51cto.com/BADAOLIUMANGQZ/6147330

相关文章

  • HBase Java API操作数据库
    场景在上面将开发环境搭建起来,要想操作操作数据库除了使用HBaseShell还可以使用JAVAAPI对HBase进行操作。注:关注公众号霸道的程序猿获取编程相关电子书、教程推送与免费......
  • JavaScript ES modules import and export with trailing commas All In One
    JavaScriptESmodulesimportandexportwithtrailingcommasAllInOneJavaScript最佳实践export+trailingcommasexport{module1,module2,//........
  • Caused by: java.lang.ClassCastException报错
    报错:java.lang.ClassCastException:xxxxcannotbecasttoxxxx问题复现:网站上传license后,后台重新加载登录页面,并调用dubbo服务验证用户信息,由apache版本切换为Alibaba......
  • java有哪些具体的就业方向?
    Java有很多的方向:安卓,PC桌面,游戏,Web等。安卓很多安卓APP都是Java开发的,不过随着移动平台的增加,安卓、IOS、PAD、微信小程序、微信公众号等,很多移动端项目为了快速迭代,会放弃......
  • java方法- 递归
    递归A方法调用B方法,我们很容易理解递归就是:A方法调用A方法,就是自己调用自己利用递归可以用简单的程序来解决一些复杂的问题,它通常把一个大型复杂的问题层层转化为......
  • java面向对象
    封装的优点1.良好的封装能够减少耦合。2.类内部的结构可以自由修改。3.可以对成员变量进行更精确的控制。4.隐藏信息,实现细节。继承的特性子类拥有......
  • 系统化学习前端之JavaScript(01)
    前言JavaScript由三部分组成:ECMAScript,DOM,BOM。ECMAScript:JavaScript核心语法,本篇主要介绍ECMAScript,即JavaScript核心语法。DOM:文件对象模型,主要作用是通过JavaS......
  • javascript 高级编程系列 - Set集合与Map集合
    ES6中新增的Set集合类型是一种有序列表,其中含有一些相互独立的非重复值,通过Set集合可以快速访问其中的数据,更有效地追踪各种离散值。1.创建Set集合并添加元素调用newS......
  • JAVA 大文件上传解决方案(500M以上)
    我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用。这次项目的需求:支持大文件的上传和续传,要求续传支持所有......
  • JAVA异步编程之Callbacks与Futures模型
    JAVA异步编程之Callbacks与Futures模型一:Callbacks模型​该模型的异步方法,在异步任务完成之后调用,主线程没有异步线程的结果。经典模型如Swing’sEventListener......