新聞中心
LinkedHashMap

東源網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、APP開發(fā)、響應式網(wǎng)站開發(fā)等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)建站成立于2013年到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設就選創(chuàng)新互聯(lián)建站。
java.lang.Object
|---java.util.AbstractMap
|---|---java.util.HashMap
|---|---|---java.util.LinkedHashMap
public class LinkedHashMap
extends HashMap
implements Map Map 接口的哈希表和鏈表實現(xiàn),具有可預測的迭代順序。 此實現(xiàn)與 HashMap 的不同之處在于它維護一個雙向鏈表,該列表貫穿其所有條目。 這個鏈表定義了迭代順序,通常是鍵插入映射的順序(插入順序)。 請注意,如果將鍵重新插入到 map 中,則插入順序不會受到影響。 (如果在調用 m.containsKey(k) 將在調用之前立即返回 true 時調用 m.put(k, v),則將鍵 k 重新插入到映射 m 中。)
此實現(xiàn)使其客戶免于 HashMap(和 Hashtable)提供的未指定的、通?;靵y的排序,而不會增加與 TreeMap 相關的成本。 無論原始 map 的實現(xiàn)如何,它都可用于生成與原始地圖具有相同順序的 map 副本:
void foo(Map m) {
Map copy = new LinkedHashMap(m);
...
}如果模塊在輸入上獲取映射,復制它,然后返回其順序由副本確定的結果,則此技術特別有用。 (客戶通常喜歡以與呈現(xiàn)相同的順序返回物品。)
提供了一個特殊的構造函數(shù)來創(chuàng)建一個鏈接哈希映射,其迭代順序是其條目最后一次訪問的順序,從最近最少訪問到最近訪問(訪問順序)。 這種映射非常適合構建 LRU 緩存。 調用 put、putIfAbsent、get、getOrDefault、compute、computeIfAbsent、computeIfPresent 或 merge 方法會導致對相應條目的訪問(假設它在調用完成后存在)。 如果值被替換,replace 方法只會導致對條目的訪問。 putAll 方法為指定映射中的每個映射生成一個條目訪問,按照指定映射的條目集迭代器提供鍵值映射的順序。 沒有其他方法生成條目訪問。 特別是,collection-views 上的操作不會影響 backing map 的迭代順序。
可以重寫 removeEldestEntry(java.util.Map.Entry) 方法,以在將新映射添加到映射時自動刪除陳舊映射的策略。
此類提供所有可選的 Map 操作,并允許 null 元素。 與 HashMap 一樣,它為基本操作(添加、包含和刪除)提供恒定時間性能,假設哈希函數(shù)在桶中正確地分散元素。 由于維護鏈表的額外費用,性能可能略低于 HashMap,但有一個例外:迭代 LinkedHashMap 的集合視圖所需的時間與映射的大小成正比,而不管其容量如何 . HashMap 的迭代可能更昂貴,需要的時間與其容量成正比。
鏈接哈希圖有兩個影響其性能的參數(shù):初始容量和負載因子。 它們的定義與 HashMap 一樣。 但是請注意,對于此類而言,為初始容量選擇過高值的懲罰不如 HashMap 嚴重,因為此類的迭代時間不受容量的影響。
請注意,此實現(xiàn)不同步。 如果多個線程同時訪問鏈接的哈希映射,并且至少有一個線程在結構上修改映射,則必須在外部同步。 這通常是通過同步一些自然封裝 map 的對象來完成的。 如果不存在這樣的對象,則應使用 Collections#synchronizedMap 方法“wrapped” map。 這最好在創(chuàng)建時完成,以防止對 map 的意外不同步訪問:
Map m = Collections.synchronizedMap(new LinkedHashMap(...));結構修改是添加或刪除一個或多個映射的任何操作,或者在訪問排序的鏈接哈希映射的情況下,影響迭代順序。 在插入排序的鏈接哈希映射中,僅更改與映射中已包含的鍵關聯(lián)的值不是結構修改。 在按訪問順序鏈接的哈希映射中,僅使用 get 查詢映射是一種結構修改。 )
由此類的所有集合視圖方法返回的集合的迭代器方法返回的迭代器是快速失敗的:如果在創(chuàng)建迭代器后的任何時間對映射進行結構修改,除了通過迭代器自己的 remove 方法之外的任何方式, 迭代器將拋出 ConcurrentModificationException。 因此,面對并發(fā)修改,迭代器快速而干凈地失敗,而不是在未來不確定的時間冒任意的、非確定性的行為。
請注意,不能保證迭代器的快速失敗行為,因為一般來說,在存在不同步的并發(fā)修改的情況下,不可能做出任何硬保證。 快速失敗的迭代器會盡最大努力拋出 ConcurrentModificationException。 因此,編寫一個依賴于這個異常的正確性的程序是錯誤的:迭代器的快速失敗行為應該只用于檢測錯誤。
此類的所有集合視圖方法返回的集合的 spliterator 方法返回的拆分器是后期綁定的、快速失敗的,并且另外報告 Spliterator#ORDERED。
此類是 Java 集合框架的成員。
嵌套類摘要
| 從類 java.util.AbstractMap 繼承的嵌套類/接口 |
|---|
| AbstractMap.SimpleEntryK,V, AbstractMap.SimpleImmutableEntryK,V |
| 從接口 java.util.Map 繼承的嵌套類/接口 |
|---|
| Map.EntryK,V |
構造函數(shù)摘要
| 構造函數(shù) | 描述 |
|---|---|
| LinkedHashMap() | 構造一個具有默認初始容量 (16) 和加載因子 (0.75) 的空插入排序 LinkedHashMap 實例。 |
| LinkedHashMap(int initialCapacity) | 構造一個具有指定初始容量和默認加載因子 (0.75) 的空插入排序 LinkedHashMap 實例。 |
| LinkedHashMap(int initialCapacity, float loadFactor) | 構造一個具有指定初始容量和負載因子的空插入排序 LinkedHashMap 實例。 |
| LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder) | 構造一個具有指定初始容量、加載因子和排序模式的空 LinkedHashMap 實例。 |
| LinkedHashMap(Map extends K,? extends V> m) | 構造一個插入順序的 LinkedHashMap 實例,其映射與指定的映射相同。 |
方法總結
| 修飾符和類型 | 方法 | 描述 |
|---|---|---|
| void | clear() | 從此 map 中刪除所有映射。 |
| boolean | containsValue(Object value) | 如果此映射將一個或多個鍵映射到指定值,則返回 true。 |
| SetMap.EntryK,V | entrySet() | 返回此映射中包含的映射的 Set 視圖。 |
| void | forEach(BiConsumer super K,? super V> action) | 對該映射中的每個條目執(zhí)行給定的操作,直到處理完所有條目或該操作引發(fā)異常。 |
| V | get(Object key) | 返回指定鍵映射到的值,如果此映射不包含該鍵的映射,則返回 null。 |
| V | getOrDefault(Object key, V defaultValue) | 返回指定鍵映射到的值,如果此映射不包含該鍵的映射,則返回 defaultValue。 |
| SetK | keySet() | 返回此映射中包含的鍵的 Set 視圖。 |
| protected boolean | removeEldestEntry(Map.EntryK,V eldest) | 如果此映射應刪除其最舊的條目,則返回 true。 |
| void | replaceAll(BiFunction super K,? super V,? extends V> function) | 將每個條目的值替換為對該條目調用給定函數(shù)的結果,直到所有條目都已處理或該函數(shù)引發(fā)異常。 |
| CollectionV | values() | 返回此映射中包含的值的集合視圖。 |
| 從類 java.util.AbstractMap 繼承的方法 |
|---|
| equals, hashCode, toString |
| 從類 java.util.HashMap 繼承的方法 |
|---|
| clone, compute, computeIfAbsent, computeIfPresent, containsKey, isEmpty, merge, put, putAll, putIfAbsent, remove, remove, replace, replace, size |
| 從接口 java.util.Map 繼承的方法 |
|---|
| compute, computeIfAbsent, computeIfPresent, containsKey, equals, hashCode, isEmpty, merge, put, putAll, putIfAbsent, remove, remove, replace, replace, size |
| 從類 java.lang.Object 繼承的方法 |
|---|
| finalize, getClass, notify, notifyAll, wait, wait, wait |
構造函數(shù)詳細信息
LinkedHashMap
public LinkedHashMap(int initialCapacity, float loadFactor)
構造一個具有指定初始容量和負載因子的空插入排序 LinkedHashMap 實例。
參數(shù):
| 參數(shù)名稱 | 參數(shù)描述 |
|---|---|
| initialCapacity | 初始容量 |
| loadFactor | 負載系數(shù) |
Throws:
| Throw名稱 | Throw描述 |
|---|---|
| IllegalArgumentException | 如果初始容量為負或負載因子為非正 |
LinkedHashMap
public LinkedHashMap(int initialCapacity)
構造一個具有指定初始容量和默認加載因子 (0.75) 的空插入排序 LinkedHashMap 實例。
參數(shù):
| 參數(shù)名稱 | 參數(shù)描述 |
|---|---|
| initialCapacity | 初始容量 |
Throws:
| Throw名稱 | Throw描述 |
|---|---|
| IllegalArgumentException | 如果初始容量為負 |
LinkedHashMap
public LinkedHashMap()
構造一個具有默認初始容量 (16) 和加載因子 (0.75) 的空插入排序 LinkedHashMap 實例。
LinkedHashMap
public LinkedHashMap(Map extends K,? extends V> m)
構造一個插入順序的 LinkedHashMap 實例,其映射與指定的映射相同。 LinkedHashMap 實例是使用默認加載因子 (0.75) 和足以在指定映射中保存映射的初始容量創(chuàng)建的。
參數(shù):
| 參數(shù)名稱 | 參數(shù)描述 |
|---|---|
| m | 其映射將放置在此 map 中的 map |
Throws:
| Throw名稱 | Throw描述 |
|---|---|
| NullPointerException | 如果指定的 map 為空 |
LinkedHashMap
public LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder)
構造一個具有指定初始容量、加載因子和排序模式的空 LinkedHashMap 實例。
參數(shù):
| 參數(shù)名稱 | 參數(shù)描述 |
|---|---|
| initialCapacity | 初始容量 |
| loadFactor | 負載系數(shù) |
| accessOrder | 排序模式 - 訪問順序為 true,插入順序為 false |
Throws:
| Throw名稱 | Throw描述 |
|---|---|
| IllegalArgumentException | 如果初始容量為負或負載因子為非正 |
方法詳情
containsValue
public boolean containsValue(Object value)
如果此映射將一個或多個鍵映射到指定值,則返回 true。
指定者:
接口 MapK,V 中的 containsValue
覆蓋:
HashMapK,V 類中的 containsValue
參數(shù):
| 參數(shù)名稱 | 參數(shù)描述 |
|---|---|
| value | 要測試其在此映射中的存在的值 |
返回:
如果此映射將一個或多個鍵映射到指定值,則為 true
get
public V get(Object key)
返回指定鍵映射到的值,如果此映射不包含該鍵的映射,則返回 null。
更正式地說,如果此映射包含從鍵 k 到值 v 的映射,使得 (key==null ? k==null : key.equals(k)),則此方法返回 v; 否則返回null。 (最多可以有一個這樣的映射。)
返回值為 null 并不一定表示該映射不包含該鍵的映射; 映射也可能將鍵顯式映射為空。 containsKey 操作可用于區(qū)分這兩種情況。
指定者:
進入接口 MapK,V
覆蓋:
進入類 HashMapK,V
參數(shù):
| 參數(shù)名稱 | 參數(shù)描述 |
|---|---|
| key | 要返回其關聯(lián)值的鍵 |
返回:
指定鍵映射到的值,如果此映射不包含該鍵的映射,則為 null
getOrDefault
public V getOrDefault(Object key, V defaultValue)
返回指定鍵映射到的值,如果此映射不包含該鍵的映射,則返回 defaultValue。
指定者:
接口 MapK,V 中的 getOrDefault
覆蓋:
HashMapK,V 類中的 getOrDefault
參數(shù):
| 參數(shù)名稱 | 參數(shù)描述 |
|---|---|
| key | 要返回其關聯(lián)值的鍵 |
| defaultValue | 鍵的默認映射 |
返回:
指定鍵映射到的值,如果此映射不包含該鍵的映射,則為 defaultValue
clear
public void clear()
從此 map 中刪除所有映射。 此調用返回后,map 將為空。
指定者:
在界面 MapK,V 中清除
覆蓋:
在類 HashMapK,V 中清除
removeEldestEntry
protected boolean removeEldestEntry(Map.EntryK,V eldest)
如果此映射應刪除其最舊的條目,則返回 true。 在將新條目插入映射后,put 和 putAll 調用此方法。 它為實現(xiàn)者提供了在每次添加新條目時刪除最舊條目的機會。 如果映射表示緩存,這很有用:它允許映射通過刪除過時的條目來減少內存消耗。
示例使用:此覆蓋將允許映射增長到 100 個條目,然后在每次添加新條目時刪除最舊的條目,保持 100 個條目的穩(wěn)定狀態(tài)。
private static final int MAX_ENTRIES = 100;
protected boolean removeEldestEntry(Map.Entry eldest) {
return size() > MAX_ENTRIES;
}此方法通常不會以任何方式修改映射,而是允許映射按照其返回值的指示修改自身。 此方法允許直接修改 map,但如果這樣做,它必須返回 false(表示 map 不應嘗試任何進一步的修改)。 未指定在此方法中修改 map 后返回 true 的效果。
此實現(xiàn)僅返回 false(因此此貼圖的作用類似于法線貼圖 - 永遠不會刪除最老的元素)。
參數(shù):
| 參數(shù)名稱 | 參數(shù)描述 |
|---|---|
| eldest | 映射中最近最少插入的條目,或者如果這是按訪問排序的映射,則為最近最少訪問的條目。 這是將被刪除的條目,此方法返回 true。 如果在 put 或 putAll 調用導致此調用之前映射為空,則這將是剛剛插入的條目; 換句話說,如果映射包含單個條目,則最舊的條目也是最新的。 |
返回:
如果應該從 map 中刪除最舊的條目,則為 true; 如果應該保留它,則為 false。
keySet
public SetK keySet()
返回此映射中包含的鍵的 Set 視圖。 集合由 map 支持,因此對 map 的更改會反映在集合中,反之亦然。 如果在對集合進行迭代時修改了映射(通過迭代器自己的刪除操作除外),則迭代的結果是不確定的。 該集合支持元素移除,即通過 Iterator.remove、Set.remove、removeAll、retainAll 和 clear 操作從映射中移除相應的映射。 它不支持 add 或 addAll 操作。 它的 Spliterator 通常提供更快的順序性能,但比 HashMap 的并行性能差得多。
指定者:
接口 MapK,V 中的 keySet
覆蓋:
HashMapK,V 類中的 keySet
返回:
此 map 中包含的鍵的集合視圖
values
public CollectionV values()
返回此映射中包含的值的集合視圖。 集合由 map 支持,因此對 map 的更改會反映在集合中,反之亦然。 如果在對集合進行迭代時修改了映射(通過迭代器自己的刪除操作除外),則迭代的結果是不確定的。 該集合支持元素移除,即通過 Iterator.remove、Collection.remove、removeAll、retainAll 和 clear 操作從映射中移除相應的映射。 它不支持 add 或 addAll 操作。 它的 Spliterator 通常提供更快的順序性能,但比 HashMap 的并行性能差得多。
指定者:
接口 MapK,V 中的值
覆蓋:
HashMapK,V 類中的值
返回:
此 map 中包含的值的視圖
entrySet
public SetMap.EntryK,V entrySet()
返回此映射中包含的映射的 Set 視圖。 集合由 map 支持,因此對 map 的更改會反映在集合中,反之亦然。 如果在對集合進行迭代時修改了映射(除了通過迭代器自己的刪除操作,或通過迭代器返回的映射條目上的 setValue 操作),則迭代的結果是未定義的。 該集合支持元素移除,即通過 Iterator.remove、Set.remove、removeAll、retainAll 和 clear 操作從映射中移除相應的映射。 它不支持 add 或 addAll 操作。 它的 Spliterator 通常提供更快的順序性能,但比 HashMap 的并行性能差得多。
指定者:
接口 MapK,V 中的 entrySet
覆蓋:
HashMapK,V 類中的 entrySet
返回:
此 map 中包含的映射的集合視圖
forEach
public void forEach(BiConsumer super K,? super V> action)
從接口復制的描述:map
對該映射中的每個條目執(zhí)行給定的操作,直到處理完所有條目或該操作引發(fā)異常。 除非實現(xiàn)類另有規(guī)定,否則按照條目集迭代的順序執(zhí)行動作(如果指定了迭代順序)。動作拋出的異常將轉發(fā)給調用者。
指定者:
接口 MapK,V 中的 forEach
覆蓋:
HashMapK,V 類中的 forEach
參數(shù):
| 參數(shù)名稱 | 參數(shù)描述 |
|---|---|
| action | 為每個條目執(zhí)行的操作 |
replaceAll
public void replaceAll(BiFunction super K,? super V,? extends V> function)
從接口復制的描述:map
將每個條目的值替換為對該條目調用給定函數(shù)的結果,直到所有條目都已處理或該函數(shù)引發(fā)異常。 函數(shù)拋出的異常被轉發(fā)給調用者。
指定者:
接口 MapK,V 中的 replaceAll
覆蓋:
類 HashMapK,V 中的 replaceAll
參數(shù):
| 參數(shù)名稱 | 參數(shù)描述 |
|---|---|
| function | 應用于每個條目的函數(shù) |
本文標題:創(chuàng)新互聯(lián)鴻蒙OS教程:鴻蒙OSLinkedHashMap
標題網(wǎng)址:http://fisionsoft.com.cn/article/cdgdsoi.html


咨詢
建站咨詢
