有序的Map集合--LinkedHashMap

提出問題:

在寫一個dao的時候,我的需求是這個dao是一個萬能的,目前的方法只有一個查詢出實體類對應的表中所有的數據,通過傳入的對象,利用反射獲取實體類中的屬性名,屬性類型,利用字符串拼接獲取相應屬性對應的set方法,利用Method中的invoke方法執行set方法。由于實體類是通過表生成的,所以表中的字段和實體類中屬性的順序是一致的,每次通過反射依次獲取到屬性名,通過結果集get出來,當到這里的時候,遇到了一個問題,一開始想的是通過反射過去的屬性名和屬性類型是一一對應的,通過鍵值對的結構存儲不是更好嗎,屬性名作為鍵,因為不可能有重復的屬性名,屬性類型作為值放入map集合中。但是遇到了問題,從數據庫中查詢的結果集中獲取結果的時候需要知道每個字段的順序,這樣getString(1)或者getInt(2)……才可以,因為通過反射已經獲取到了屬性類型所以加一個判斷就可以選擇出使用哪一個get方法是getString()還是getInt()。由于map集合時無序的,我們接觸到最多的集合中只有List集合時有序的,但是不能存儲鍵值對,實體類中的屬性順序是和表中的字段順序對應的,我們可以利用這個解決這個問題,通過查了查,發現有一種map(LinkedHashMap)集合時有序的,可以做到按照用戶放入集合的順序取出集合中的元素,上面遇到的問題就解決了。

LinkedHashMap介紹:

簡單的介紹一下。通過LinkedHashMap這個名字可以看出來這是個鏈表和哈希表的結合,鏈表是有順序的,哈希表通常說是散列表,通過計算鍵的哈希值,用這個哈希值映射到表結構中,LinkedHashMap允許存儲null值,基本的和HashMap一致,通過鍵找到值,鍵不可以重復,值可以重復。下圖是LinkedHashMap的繼承關系,繼承于HashMap,所以基本的方法都是一致的。


LinkedHashMap的實現:

底層和HashMap一致,用哈希表實現,區別是LinkedHashMap還使用了一個雙向鏈表實現順序存取,這個雙向鏈表的實現依賴于Entry這個內部類,這個Entry內部類在集合中非常常見。通過查看Entry類中的方法實現也可以看出


在刪除和增加時,都在修改前面的引用和后面的引用。

在HashMap中只是利用了哈希表,而LinkedHashMap中還用到了鏈表記錄順序,在LinkedHashMap中并沒有put方法,而是利用了HashMap中的put方法,但是重寫了put方法中調用的的addEntry()方法



通過上面方法的分析,可以看出在添加節點的時候(由于是雙向鏈表)都會在尾部進行添加。

轉載于:https://www.cnblogs.com/duzhentong/p/7816531.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/286629.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/286629.shtml
英文地址,請注明出處:http://en.pswp.cn/news/286629.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Leetcode之僅僅反轉字母

1 題目 給定一個字符串 S,返回 “反轉后的” 字符串,其中不是字母的字符都保留在原地,而所有字母的位置發生反轉。 示例 1:輸入:"ab-cd" 輸出:"dc-ba" 示例 2:輸入:"a-bC-dEf-ghIj" 輸出:"j-Ih-gfE-dCba" 示例 3:輸入:&qu…

【SignalR全套系列】之在.Net Core 中實現長輪詢

微信公眾號:趣編程ACE關注可了解更多的.NET日常實戰開發技巧,如需源碼 請后臺留言 源碼;前文回顧【SignalR全套系列】之在.Net Core 中實現Server-Send Events消息推送【SignalR全套系列】之在.NetCore中實現WebSocket雙工通信【SignalR全套系列】之在.N…

完美解決ArcGIS10.2和Erdas9.2軟件沖突的方法:共存!

用過ArcGIS和Erdas軟件的都知道,二者存在著服務的沖突,為了解決共存的問題,筆者曾多次重裝系統,但未能如愿以償。其實不需要相互關閉服務如此麻煩。那如何在安裝有arcgis的電腦安裝erdas并解決沖突呢?直接上視頻教程。…

架構師之路16年精選50篇

2016精選索引,點擊標題閱讀相關文章。【方法論】《秒殺系統架構優化思路》《分布式ID生成器》《互聯網架構,如何進行容量設計》《線程數究竟設多少合理》《單點系統架構的可用性與性能優化》《關于負載均衡的一切》《異構服務器負載均衡及過載保護》《LV…

yii 前后臺分離及登陸驗證

2019獨角獸企業重金招聘Python工程師標準>>> 比較合理的做法其實是分成兩個框架來布署;然而這樣說法也太絕對。 事實上是針對不同系統,應采用不同的方法。如為CMS系統,則不需很復雜的權限管理,但如果有管理員與會員之分…

雙谷人才財務管理(序)

IT是一個迅速發展的行業,教育是一個良心的行業,兩者交集——IT培訓,在整個市場中占有一個不可或缺的地位。好多大學生,抱怨找不到工作;好多企業找不到合適的程序員,這幾年這個問題越來越嚴重。。。。于是IT…

Android之打開手機系統相冊

1、需求 打開系統相冊,獲取圖片進行掃描操作 2、代碼實現 Intent pickIntent new Intent(Intent.ACTION_PICK,MediaStore.Images.Media.EXTERNAL_CONTENT_URI);pickIntent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");Ca…

Kibana

2019獨角獸企業重金招聘Python工程師標準>>> Kibana是一個基于瀏覽器頁面的Elasticsearch前端展示工具。Kibana全部使用HTML語言和Javascript編寫的,查詢語法是基于Lucene的查詢語法。允許布爾運算符、通配符和字段篩選。注意關鍵字要大寫 全文搜索 在搜…

電腦QQ能登上,網頁打不開的解決辦法

打開360衛士,在功能大全里選擇網絡優化,斷網急救箱。 可以看到DNS服務異常、瀏覽器配置異常,點擊立即修復。

個人黑名單 抄襲恥辱墻

抄襲恥辱墻 博主抄襲文原文我愛Python數據挖掘https://blog.csdn.net/weixin_38037405/article/details/125862095https://blog.csdn.net/A757291228/article/details/117464313黃埔數據分析https://blog.csdn.net/weixin_39060517/article/details/118024847https://blog.csdn…

快速掌握 ASP.NET 身份認證框架 Identity(一)

推薦關注「碼俠江湖」加星標,時刻不忘江湖事ASP.NET Core 內置了一個強大的身份認證框架 Identity,掌握它可以讓我們快速開發高安全的身份認證功能,不僅如此,它還是一個基于數據庫的用戶管理系統,其中包含了大量的輔助…

淺談大型web系統架構

動態應用,是相對于網站靜態內容而言,是指以c/c、php、Java、perl、.net等服務器端語言開發的網絡應用軟件,比如論壇、網絡相冊、交友、BLOG等常見應用。動態應用系統通常與數據庫系統、緩存系統、分布式存儲系統等密不可分。   大型動態應用…

Android之webview長按超鏈接類型獲取鏈接文字及url、長按圖片鏈接類型分別獲取圖片和鏈接的url

1 、需求 webview長按超鏈接獲取鏈接文字及urlwebview長按圖片鏈接類型獲分別獲取圖片和鏈接的url 2、解決辦法 1)、設置webview的OnLongClickListener事件,關鍵代碼如下 companion object {const val LINK_TYPE = 1const val IMAGE_LINK_TYPE = 2}var mHandler = object :…

PostgreSQL 統計信息pg_statistic格式及導入導出dump_stat - 兼容Oracle

標簽 PostgreSQL , dump_stat , 統計信息 , 導出導入 背景 《PostgreSQL 規格評估 - 微觀、宏觀、精準 多視角估算數據庫性能(選型、做預算不求人)》 EXPLAIN是PG數據庫用于輸出SQL執行計劃的語法, 1、生成的執行計劃中包含COST一項。 如果校準了成本因子&#xff0…

PHP: 手把手編寫自己的 MVC 框架實例教程

1 什么是MVC MVC模式(Model-View-Controller)是軟件工程中的一種軟件架構模式,把軟件系統分為三個基本部分:模型(Model)、視圖(View)和控制器(Controller)。 …

freemarker 異常處理

SSH2處理方案&#xff1a; freemarker文件如果出錯&#xff0c;網站的前臺頁面會報出很明顯的錯誤-焦黃的背景&#xff0c;血紅的文字&#xff0c;很不利于用戶體驗的。如何修改這個問題呢&#xff1f;首先需要在struts.xml配置文件里添加下面一行代碼&#xff1a; 1<consta…

ArcGIS10.8按屬性選擇中根據關鍵字like模糊查詢方法總結

在實際工作中,通常需要按照某一個或某幾個關鍵字進行模糊查詢,已到達快速、準確、高效查詢的目的。在ArcGIS中是通過SQL語句,利用關鍵字like來實現的。例如我們可以借助like快速查詢滿足以某一個關鍵字開頭,以某一個關鍵字結尾,或者包含某一個關鍵字的結果。 在ArcGIS中,…

2021年復盤總結發現了C站博主缺少的賺錢之路

一、 我2021年的六大Flag 其實最開始我是不打算年終總結的&#xff0c;因為2021年我的十大Flag都沒有完成&#xff0c;我說出來可能你會嘲笑我&#xff0c;所以我打算還是說出來吧。 這六大Flag如下&#xff1a; C站百萬粉百篇實戰文其他自媒體平臺十萬粉公眾號一萬粉財務自…

五大微信小程序開發IDE深度評測

微信小程序已經內測有一段時間了&#xff0c;筆者本著好奇加學習的心態寫了幾個小demo&#xff0c;雖然在MINA框架上并沒有遇到太多的坑&#xff0c;但官方開發工具實在不敢恭維。 api提示不全&#xff0c;要一個個查api啊&#xff0c;寫代碼超級慢啊 很多必備的快捷鍵都沒有&…

Maui的學習之路(2)--Mac窗體設置

Maui的學習之路今天是我開啟Maui學習之路的第二天&#xff0c;我不是很高興又能水一篇文章&#xff0c;我只能說這文章真好水。話不多說&#xff0c;我們進入正題&#xff0c;昨天解決了Windows下TitleBar以及窗體大小的問題&#xff0c;今天同樣的問題&#xff0c;在Mac上又要…