Java中Map类型数据使用LinkedHashMap保留数据的插入顺序
場(chǎng)景
Vue中JS遍歷后臺(tái)JAVA返回的Map數(shù)據(jù),構(gòu)造對(duì)象數(shù)組數(shù)據(jù)格式:
Vue中JS遍歷后臺(tái)JAVA返回的Map數(shù)據(jù),構(gòu)造對(duì)象數(shù)組數(shù)據(jù)格式_BADAO_LIUMANG_QIZHI的博客-CSDN博客
在上面構(gòu)造以時(shí)間為Key,以數(shù)量為value的數(shù)據(jù)格式時(shí),查詢(xún)一段時(shí)間內(nèi)的數(shù)據(jù)后返回給前端,
前端進(jìn)行渲染成時(shí)間軸的柱狀圖。
如果直接使用
Map<String,Integer> resultMap = new new HashMap<String,Integer>();并且按照時(shí)間順序記錄每天的數(shù)據(jù)時(shí),不會(huì)按照插入的數(shù)據(jù)記錄。
如果要按照插入的數(shù)據(jù)記錄,需要使用
Map<String,Integer> resultMap = new LinkedHashMap<String,Integer>();注:
博客:
BADAO_LIUMANG_QIZHI的博客_霸道流氓氣質(zhì)_CSDN博客-C#,SpringBoot,架構(gòu)之路領(lǐng)域博主
關(guān)注公眾號(hào)
霸道的程序猿
獲取編程相關(guān)電子書(shū)、教程推送與免費(fèi)下載。
實(shí)現(xiàn)
HashMap:
最常用的Map,它根據(jù)鍵的HashCode值存儲(chǔ)數(shù)據(jù),根據(jù)鍵可以直接獲取它的值,
具有很快的訪問(wèn)速度,遍歷時(shí),取得數(shù)據(jù)的順序是完全隨機(jī)的。
HashMap最多只允許一條記錄的鍵為Null;允許多條記錄的值為Null;
HashMap不支持線程的同步,即任一時(shí)刻可以有多個(gè)線程同時(shí)寫(xiě)HashMap;
可能會(huì)導(dǎo)致數(shù)據(jù)的不一致。如果需要同步,
可以用Collections的synchronizedMap方法使HashMap具有同步的能力,
或者使用ConcurrentHashMap。
Hashtable與HashMap類(lèi)似,它繼承自Dictionary類(lèi),
不同的是:它不允許記錄的鍵或者值為空;它支持線程的同步,
即任一時(shí)刻只有一個(gè)線程能寫(xiě)Hashtable,因此也導(dǎo)致了 Hashtable在寫(xiě)入時(shí)會(huì)比較慢。
LinkedHashMap
保存了記錄的插入順序,在用Iterator遍歷LinkedHashMap時(shí),
先得到的記錄肯定是先插入的.也可以在構(gòu)造時(shí)用帶參數(shù),
按照應(yīng)用次數(shù)排序。在遍歷的時(shí)候會(huì)比HashMap慢,
不過(guò)有種情況例外,當(dāng)HashMap容量很大,實(shí)際數(shù)據(jù)較少時(shí),
遍歷起來(lái)可能會(huì)比LinkedHashMap慢,因?yàn)長(zhǎng)inkedHashMap的遍歷速度只和實(shí)際數(shù)據(jù)有關(guān),
和容量無(wú)關(guān),而HashMap的遍歷速度和他的容量有關(guān)。
完整示例代碼:
??? public AjaxResult list(BusBlog busBlog){BusBlog indexModel=new BusBlog();//構(gòu)造返回?cái)?shù)據(jù),注意這里需要用LinkedHashMapMap<String,Integer> resultMap = new LinkedHashMap<String,Integer>();if(null!= busBlog.getBeginDate() && null!= busBlog.getEndDate()) {//獲取請(qǐng)求參數(shù),開(kāi)始時(shí)間和結(jié)束時(shí)間indexModel.setBeginDate(busBlog.getBeginDate());indexModel.setEndDate(busBlog.getBeginDate());List<String> rangeData = new ArrayList<String>();//查詢(xún)數(shù)據(jù)庫(kù)獲取指定時(shí)間內(nèi)的數(shù)據(jù)rangeData = busBlogService.selectBlogCountByDate(busBlog);if (rangeData.size() >= 0) {// 日期格式化SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");try {// 起始日期Date d1 = sdf.parse(busBlog.getBeginDate());// 結(jié)束日期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();//獲取查詢(xún)的數(shù)據(jù)每天的檔案數(shù)量for (String oneDay:rangeData) {Date oneDayDate = sdf.parse(oneDay);if(oneDayDate.toString().equals(tmp.toString())){dayCount++;}}resultMap.put(sdf.format(tmp),dayCount);// 天數(shù)加上1dd.add(Calendar.DAY_OF_MONTH, 1);}System.out.println(resultMap);} catch (ParseException e) {e.printStackTrace();}}}return AjaxResult.success(resultMap);}總結(jié)
以上是生活随笔為你收集整理的Java中Map类型数据使用LinkedHashMap保留数据的插入顺序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Vue中JS遍历后台JAVA返回的Map
- 下一篇: Nginx映射本地静态资源时,浏览器提示