日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

有序的Map集合--LinkedHashMap

發布時間:2023/12/6 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 有序的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

總結

以上是生活随笔為你收集整理的有序的Map集合--LinkedHashMap的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。