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