<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # Java `LinkedHashMap`類 > 原文: [https://howtodoinjava.com/java/collections/linkedhashmap/](https://howtodoinjava.com/java/collections/linkedhashmap/) Java 中的`LinkedHashMap`用于存儲非常類似于`HashMap`類的鍵值對。 區別在于,`LinkedHashMap`會在`HashMap`無序的情況下保持插入其中的元素的順序。 在本 Java 集合教程中,我們將學習`LinkedHashMap`類,其方法,用例和其他重要細節。 ```java Table of Contents 1\. LinkedHashMap Hierarchy 2\. LinkedHashMap Features 3\. LinkedHashMap Constructors 4\. LinkedHashMap Methods 5\. LinkedHashMap Usecases 6\. LinkedHashMap Performance 7\. Concurrency in LinkedHashMap 8\. Conclusion ``` ## 1\. `LinkedHashMap`層次結構 `LinkedHashMap`類在 Java 中聲明如下。 它**擴展了`HashMap`類** ,并且**實現了`Map`** 接口。 `'K'`是鍵的類型,`'V'`是鍵的映射值的類型。 ```java public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V> { //implementation } ``` ## 2\. `LinkedHashMap`特性 有關 Java `LinkedHashMap`類的重要知識是: * 它存儲類似于`HashMap`的鍵值對。 * 它僅包含唯一鍵。 不允許重復的鍵。 * 它可能具有一個`null`鍵和多個`null`值。 * 通過將元素添加到內部管理的**雙鏈表**中,它可以保持插入的`K`,`V`對的順序。 #### 2.1 按插入順序排序的`LinkedHashMap` 默認情況下,`LinkedHashMap`是插入順序的。 將元素添加到元素時,它會保持其順序。 在`LinkedHashMap`上進行迭代時,我們會按添加`KV`對的確切順序獲得它們。 ```java LinkedHashMap<Integer, String> pairs = new LinkedHashMap<>(); pairs.put(1, "A"); pairs.put(2, "B"); pairs.put(3, "C"); pairs.put(4, "D"); pairs.forEach((key, value) -> { System.out.println("Key:"+ key + ", Value:" + value); }); ``` 程序輸出。 ```java Key:1, Value:A Key:2, Value:B Key:3, Value:C Key:4, Value:D ``` #### 2.2 按訪問順序排序的`LinkedHashMap` 在訪問順序映射中,鍵是根據上次使用`LinkedHashMap`的任何方法對其進行訪問時的訪問順序排序的。 調用`put`,`putIfAbsent`,`get`,`getOrDefault`,`compute`,`computeIfAbsent`,`computeIfPresent`或`merge`方法會導致對相應條目的訪問。 鍵按從最近訪問最少到最近訪問的順序排序,并建立 LRU 緩存。 要創建訪問順序圖,`LinkedHashMap`有一個特殊的構造器參數。 設置為`true`時,`LinkedHashMap`維護訪問順序。 ```java //3rd parameter set access order LinkedHashMap<Integer, String> pairs = new LinkedHashMap<>(2, .75f, true); pairs.put(1, "A"); pairs.put(2, "B"); pairs.put(3, "C"); pairs.put(4, "D"); //Access 3rd pair pairs.get(3); //Access 1st pair pairs.getOrDefault(2, "oops"); pairs.forEach((key, value) -> { System.out.println("Key:"+ key + ", Value:" + value); }); ``` 程序輸出: ```java Key:1, Value:A Key:4, Value:D Key:3, Value:C Key:2, Value:B ``` 注意輸出,最近訪問的條目如何到達序列末尾。 ## 3\. `LinkedHashMap`構造器 LinkedHashMap 具有五種構造器: 1. **`LinkedHashMap()`**:使用默認的初始容量(16)和負載因子(0.75)初始化默認的`LinkedHashMap`實現。 2. **`LinkedHashMap(int capacity)`**:使用指定的容量和負載因子(0.75)初始化`LinkedHashMap`。 3. **`LinkedHashMap(Map map)`**:使用與指定映射相同的映射初始化`LinkedHashMap`。 4. **`LinkedHashMap(int capacity, float fillRatio)`**:使用指定的初始容量和負載因子初始化`LinkedHashMap`。 5. **`LinkedHashMap(int Capacity, float fillRatio, boolean Order)`**:初始化`LinkedHashMap`的容量和填充率以及是否維護插入順序或訪問順序。 * `'true'`啟用訪問順序。 * `'false'`啟用插入順序。 使用其他構造器時,這是默認值行為。 ## 4\. `LinkedHashMap`方法 我們應該學習有關`LinkedHashMap`的重要方法如下: 1. **`void clear()`**:它將從映射中刪除所有鍵值對。 2. **`void size()`**:它返回此映射中存在的鍵/值對的數量。 3. **`void isEmpty()`**:如果此映射不包含鍵值映射,則返回`true`。 4. **`boolean containsKey(Object key)`**:如果映射中存在指定的鍵,則返回`'true'`。 5. **`boolean containsValue(Object key)`**:如果將指定值映射到映射中的至少一個鍵,則返回`'true'`。 6. **`Object get(Object key)`**:檢索由指定的`key`映射的`value`。 7. **`Object remove(Object key)`**:如果存在,它將從映射中刪除指定鍵的鍵值對。 8. **`boolean removeEldestEntry(Map.Entry eldest)`**:當映射從訪問順序映射中刪除其最舊的條目時,它返回`'true'`。 #### 4.1 Java `LinkedHashMap`示例 Java 程序,用于演示`linkedhashmap`方法的用法。 ```java import java.util.Iterator; import java.util.LinkedHashMap; public class LinkedHashMapExample { public static void main(String[] args) { //3rd parameter set access order LinkedHashMap<Integer, String> pairs = new LinkedHashMap<>(); pairs.put(1, "A"); pairs.put(2, "B"); pairs.put(3, "C"); String value = pairs.get(3); //get method System.out.println(value); value = pairs.getOrDefault(5, "oops"); //getOrDefault method System.out.println(value); //Iteration example Iterator<Integer> iterator = pairs.keySet().iterator(); while(iterator.hasNext()) { Integer key = iterator.next(); System.out.println("Key: " + key + ", Value: " + pairs.get(key)); } //Remove example pairs.remove(3); System.out.println(pairs); System.out.println(pairs.containsKey(1)); //containsKey method System.out.println(pairs.containsValue("B")); //containsValue method } } ``` 程序輸出: ```java C oops Key: 1, Value: A Key: 2, Value: B Key: 3, Value: C {1=A, 2=B} true true ``` ## 5\. `LinkedHashMap`用例 在幾乎所有需要使用`HashMap`的情況下,我們都可以使用`LinkedHashMap`。 在特性方面,它可以非常透明地替換`HashMap`。 另外,`LinkedHashMap`維護插入順序,這在我們要維護添加到`Map`的對的順序時非常有用。 有序訪問權限的`LinkedHashMap`通過覆蓋`removeEldestEntry()`方法來強加一個用于在將新映射添加到映射時自動刪除陳舊的策略的方法,從而為創建 **LRU 緩存**特性提供了一個很好的起點。 這使您可以使用定義的某些條件使數據過期。 ## 6\. `LinkedHashMap`的性能 `HashMap`和`LinkedHashMap`以恒定的時間執行添加,刪除和包含的基本操作。 `LinkedHashMap`的性能比`HashMap`差一些,因為它必須維護一個雙向鏈表,而`HashMap`僅維護鏈表。 另一方面,在`LinkedHashMap`情況下遍歷`Map`的速度比`HashMap`略快,因為所需的時間僅與“大小”成比例。 對于`HashMap`,迭代性能與“大小+容量”成正比。 ## 7\. `LinkedHashMap`中的并發 `HashMap`和`LinkedHashMap`都**也不是線程安全的**,這意味著我們不能直接在多線程應用程序中使用它們以獲得一致的結果。 我們應該使用`Collections.synchronizedMap(Map map)`方法顯式地同步它們。 ```java Map<Integer, Integer> numbers = Collections.synchronizedMap(new LinkedHashMap<>()); Map<Integer, Integer> numbers = Collections.synchronizedMap(new HashMap<>()); ``` 對于`HashMap`,更建議使用`ConcurrentHashMap`,因為它提供的并發程度更高。 ## 8\. 總結 基于以上所有信息,我們可以說,在大多數情況下,最好選擇`HashMap`而不是`LinkedHashMap`。 僅當我們有某些要求或用例需要保持添加到映射的元素順序時,我們才更喜歡`LinkedHashMap`。 兩者在大多數現實用例中都提供幾乎相同的性能。 當我們擁有大量數據時,則僅應考慮它們之間的權衡取舍。 學習愉快! 參考: [`LinkedHashMap` Java 文檔](https://docs.oracle.com/javase/10/docs/api/java/util/LinkedHashMap.html)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看