Java有序的Map LinkedHashMap用法詳解
LinkedHashMap
1.定義:
LinkedHashMap是HashMap和雙向鏈表的合二為一,即一個將所有Entry節(jié)點鏈入一個雙向鏈表的HashMap(LinkedHashMap = HashMap + 雙向鏈表)
LinkedHashMap和HashMap是Java Collection Framework 的重要成員,也是Map族(如下圖所示)
LinkedHashMap是HashMap的子類(擁有HashMap的所有特性)
LinkedHashMap和HashMap最多只允許一條Entry的鍵為Null(多條會覆蓋),但允許多條Entry的值為Null
LinkedHashMap 也是 Map 的一個非同步的實現(xiàn)
LinkedHashMap很好的支持LRU算法
HashMap是無序的,LinkedHashMap通過維護一個額外的雙向鏈表保證了迭代順序
迭代順序可以是插入順序,也可以是訪問順序(即根據(jù)鏈表中元素的順序可以將LinkedHashMap分為:保持插入順序的LinkedHashMap和保持訪問順序的LinkedHashMap,其中LinkedHashMap的默認實現(xiàn)是按插入順序排序的)
LinkedHashMap簡介
LinkedHashMap是Java提供的一個集合類,它繼承自HashMap,并在HashMap基礎上維護一條雙向鏈表,使得具備如下特性:
支持遍歷時會按照插入順序有序進行迭代。
支持按照元素訪問順序排序,適用于封裝LRU緩存工具。
因為內(nèi)部使用雙向鏈表維護各個節(jié)點,所以遍歷時的效率和元素個數(shù)成正比,相較于和容量成正比的HashMap來說,迭代效率會高很多。
LinkedHashMap邏輯結構如下圖所示,它是在HashMap基礎上在各個節(jié)點之間維護一條雙向鏈表,使得原本散列在不同bucket上的節(jié)點、鏈表、紅黑樹有序關聯(lián)起來。
下面看下java 有序的Map LinkedHashMap簡介,內(nèi)容如下所示:
無序的HashMap
我們知道HashMap是無需的,數(shù)據(jù)并不是按我們插入的順序排序的,我們可以驗證下
public class Test6 { public static void main(String[] args) { Map<String, String> hashMap = new HashMap<String, String>(); hashMap.put("name1", "value1"); hashMap.put("name2", "value2"); hashMap.put("name3", "value3"); Set<Entry<String, String>> set = hashMap.entrySet(); Iterator<Entry<String, String>> iterator = set.iterator(); while(iterator.hasNext()) { Entry<String, String> entry = iterator.next(); String key = (String) entry.getKey(); String value = (String) entry.getValue(); System.out.println("key:" + key + ", value:" + value); } } }
可以看到輸出結果并不是按數(shù)據(jù)插入的順序的
key:name3, value:value3
key:name2, value:value2
key:name1, value:value1
有序的LinkedHashMap
要想實現(xiàn)有序的Map,我們可以用LinkedHashMap,下面驗證一下,把原來代碼的HashMap替換成LinkedHashMap
public class Test6 { public static void main(String[] args) { Map<String, String> hashMap = new LinkedHashMap<String, String>(); hashMap.put("name1", "value1"); hashMap.put("name2", "value2"); hashMap.put("name3", "value3"); Set<Entry<String, String>> set = hashMap.entrySet(); Iterator<Entry<String, String>> iterator = set.iterator(); while(iterator.hasNext()) { Entry<String, String> entry = iterator.next(); String key = (String) entry.getKey(); String value = (String) entry.getValue(); System.out.println("key:" + key + ", value:" + value); } } }
可以看到輸出結果為我們插入的順序
key:name1, value:value1
key:name2, value:value2
key:name3, value:value3
到此這篇關于java 有序的Map LinkedHashMap簡介的文章就介紹到這了,更多相關java Map LinkedHashMap內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
手把手教你設置IntelliJ IDEA 的彩色代碼主題的圖文教程
本文給出一系列 IntelliJ IDEA 代碼的彩色主題,感興趣的朋友一起看看吧2018-01-01詳解在IDEA中使用MyBatis Generator逆向工程生成代碼
這篇文章主要介紹了詳解在IDEA中使用MyBatis Generator逆向工程生成代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-06-06SpringBoot整合HikariCP數(shù)據(jù)庫連接池方式
這篇文章主要介紹了SpringBoot整合HikariCP數(shù)據(jù)庫連接池方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-03-03Java中MyBatis傳入?yún)?shù)parameterType問題
這篇文章主要介紹了Java中MyBatis傳入?yún)?shù)parameterType問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-12-12