场景
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); }