最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中LinkedHashMap的實現(xiàn)詳解

 更新時間:2023年09月17日 14:32:47   作者:我崽不熬夜  
LinkedHashMap是Java中的一個Map容器,它繼承自HashMap,并且還可以對元素進行有序存儲,本文將介紹LinkedHashMap的實現(xiàn)原理以及使用方法,并且提供相應(yīng)的測試用例和全文小結(jié),需要的可以參考下

前言

在Java中,Map容器是一個非常常用的數(shù)據(jù)結(jié)構(gòu),用于存儲一組鍵值對。在一些場景下,需要對Map容器中的元素進行有序存儲,并且還需要支持常見的Map操作,例如插入、刪除、查找等等。LinkedHashMap就是一個可以滿足這些要求的Map容器。

摘要

LinkedHashMap是Java中的一個Map容器,它繼承自HashMap,并且還可以對元素進行有序存儲。在LinkedHashMap中,元素的順序可以按照插入順序或者訪問順序進行排列。在插入順序模式下,元素按照插入順序進行排列。在訪問順序模式下,每次訪問一個元素之后,該元素都會被提到最后面,保證最后被訪問的元素永遠在最后面。

本文將介紹LinkedHashMap的實現(xiàn)原理以及使用方法,并且提供相應(yīng)的測試用例和全文小結(jié)。

LinkedHashMap

實現(xiàn)原理

LinkedHashMap實現(xiàn)有序存儲的方式是維護一個雙向鏈表,用于記錄元素的插入順序或者訪問順序。在LinkedHashMap中,每個元素都是一個鏈表節(jié)點,包含了前驅(qū)節(jié)點、后繼節(jié)點、鍵、值等信息。插入或者訪問一個元素時,會將它對應(yīng)的節(jié)點移動到鏈表的末尾。

在LinkedHashMap內(nèi)部,有一個成員變量accessOrder,用于表示當前使用的順序模式。如果accessOrder為true,則表示當前使用的是訪問順序模式;如果accessOrder為false,則表示當前使用的是插入順序模式。在訪問順序模式下,每次訪問一個元素時,會將它對應(yīng)的節(jié)點移動到鏈表的末尾。

在LinkedHashMap中,插入或者刪除一個元素時,會同時更新雙向鏈表。在插入一個元素時,會將它對應(yīng)的節(jié)點放到鏈表的末尾;在刪除一個元素時,會直接刪除對應(yīng)的節(jié)點,并且修改前驅(qū)節(jié)點和后繼節(jié)點的指針。

在LinkedHashMap中,還有一個重要的成員變量modCount,用于記錄Map容器的結(jié)構(gòu)修改次數(shù)。任何會修改Map結(jié)構(gòu)的操作,例如插入、刪除、重建等等,都會導致modCount的值增加??梢岳胢odCount來檢測容器內(nèi)部結(jié)構(gòu)是否發(fā)生變化。

使用方法

LinkedHashMap的使用方法和HashMap基本相同??梢酝ㄟ^以下方式創(chuàng)建一個LinkedHashMap對象:

Map<K, V> map = new LinkedHashMap<>();

在創(chuàng)建LinkedHashMap對象時,還可以傳入一個initialCapacity參數(shù),用于指定Map容器的初始容量;以及一個loadFactor參數(shù),用于指定Map容器的負載因子。

LinkedHashMap提供了常見的Map操作,例如put、get、remove等等。在LinkedHashMap中,還可以通過以下方法來修改順序模式:

Map<K, V> map = new LinkedHashMap<>(); // 構(gòu)造一個使用訪問順序模式的LinkedHashMap
map.get(key); // 訪問一個元素,會將對應(yīng)的節(jié)點移動到鏈表的末尾

在使用訪問順序模式時,還可以通過以下方法來獲取最先訪問的元素:

Map<K, V> map = new LinkedHashMap<>(); // 構(gòu)造一個使用訪問順序模式的LinkedHashMap
K firstKey = map.keySet().iterator().next(); // 獲取最先訪問的元素

LinkedHashMap代碼方法介紹

構(gòu)造方法

public LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder)

構(gòu)造一個LinkedHashMap對象。其中,initialCapacity表示Map容器的初始容量;loadFactor表示Map容器的負載因子;accessOrder表示Map容器的順序模式,true表示訪問順序模式,false表示插入順序模式。

put方法

public V put(K key, V value)

向Map容器中插入一個元素。其中,key表示元素的鍵;value表示元素的值。

get方法

public V get(Object key)

獲取Map容器中指定鍵對應(yīng)的值。其中,key表示指定的鍵。

remove方法

public V remove(Object key)

刪除Map容器中指定鍵對應(yīng)的元素。其中,key表示指定的鍵。

測試用例

以下是一個使用LinkedHashMap的測試用例,在該測試用例中,首先創(chuàng)建一個使用插入順序模式的LinkedHashMap對象,然后向Map容器中插入3個元素;接著訪問第2個元素,并向Map容器中插入1個元素;最后遍歷Map容器,輸出所有元素的鍵和值,以及最先插入和最后插入的元素的鍵和值。

package com.example.demo.javaTest.map;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.LinkedHashMap;
import java.util.Map;
/**
 * @Date 2023-09-09 20:58
 */
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class LinkedHashMapTest {
    @Test
    public void linkedHashMapTest() {
        //創(chuàng)建一個LinkedHashMap集合
        Map<Integer, String> map = new LinkedHashMap<>();
        map.put(1, "a");
        map.put(2, "b");
        map.put(3, "c");
        map.get(2);
        System.out.println("map.get(2) = " + map.get(2));
        map.put(4, "d");
        //存放最后一個key
        Integer lastKey = null;
        for (Map.Entry<Integer, String> entry : map.entrySet()) {
            lastKey = entry.getKey();
            System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
        }
        Integer firstKey = map.keySet().iterator().next();
        System.out.println("First key: " + firstKey + ", First value: " + map.get(firstKey));
        System.out.println("Last key: " + lastKey + ", Last value: " + map.get(lastKey));
    }
}

運行結(jié)果如下:

全文小結(jié)

本文介紹了Java中的LinkedHashMap,它可以實現(xiàn)有序存儲,并且支持常見的Map操作。在內(nèi)部實現(xiàn)中,LinkedHashMap維護了一個雙向鏈表,用于記錄元素的順序。在使用LinkedHashMap時,可以選擇使用插入順序模式或者訪問順序模式。LinkedHashMap提供了常見的Map操作,例如put、get、remove等等。在使用訪問順序模式時,還可以通過方法來獲取最先訪問的元素和最后訪問的元素。最后,我們還提供了一個使用LinkedHashMap的測試用例,方便大家進行參考。

以上就是Java中LinkedHashMap的實現(xiàn)詳解的詳細內(nèi)容,更多關(guān)于Java LinkedHashMap的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SpringMVC攔截器實現(xiàn)監(jiān)聽session是否過期詳解

    SpringMVC攔截器實現(xiàn)監(jiān)聽session是否過期詳解

    這篇文章主要介紹了SpringMVC攔截器實現(xiàn)監(jiān)聽session是否過期詳解,還是比較不錯的,這里分享給大家,供需要的朋友參考。
    2017-11-11
  • mybatis plus的3種查詢方式(小結(jié))

    mybatis plus的3種查詢方式(小結(jié))

    這篇文章主要介紹了mybatis plus的3種查詢方式(小結(jié)),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • java模擬實現(xiàn)微信紅包算法

    java模擬實現(xiàn)微信紅包算法

    這篇文章主要為大家詳細介紹了java實現(xiàn)模擬微信紅包算法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • Java深入了解數(shù)據(jù)結(jié)構(gòu)之哈希表篇

    Java深入了解數(shù)據(jù)結(jié)構(gòu)之哈希表篇

    哈希表是一種根據(jù)關(guān)鍵碼去尋找值的數(shù)據(jù)映射結(jié)構(gòu),該結(jié)構(gòu)通過把關(guān)鍵碼映射的位置去尋找存放值的地方,說起來可能感覺有點復雜,我想我舉個例子你就會明白了,最典型的的例子就是字典
    2022-01-01
  • Java 之類型轉(zhuǎn)換與多態(tài)詳情

    Java 之類型轉(zhuǎn)換與多態(tài)詳情

    Java使用類創(chuàng)造新的類型(type),并使用繼承來便利我們創(chuàng)建類。再深一層講類型,并是多態(tài)(polymorphism)的概念。本文將給大家介紹Java 的類型轉(zhuǎn)換與多態(tài),需要的小伙伴可以參考下面文章的具體內(nèi)容
    2021-09-09
  • Java各種排序算法匯總(冒泡,選擇,歸并,希爾及堆排序等)

    Java各種排序算法匯總(冒泡,選擇,歸并,希爾及堆排序等)

    這篇文章主要介紹了Java各種排序算法,以大量實例形式匯總分析了Java常用的各種排序算法,包括冒泡排序、快速排序、堆排序、插入排序、希爾排序、選擇排序、歸并排序等,需要的朋友可以參考下
    2015-11-11
  • idea mabatisX插件生成mapper.xml文件全過程

    idea mabatisX插件生成mapper.xml文件全過程

    文章介紹了如何在IntelliJ IDEA中使用MybatisX插件自動生成MyBatis的Mapper和XML文件,步驟包括安裝插件、選擇數(shù)據(jù)庫表并右鍵選擇MybatisX-Generator進行配置和生成
    2026-03-03
  • elasticsearch元數(shù)據(jù)構(gòu)建metadata及routing類源碼分析

    elasticsearch元數(shù)據(jù)構(gòu)建metadata及routing類源碼分析

    這篇文章主要為大家介紹了elasticsearch元數(shù)據(jù)構(gòu)建metadata?routing類內(nèi)部源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-04-04
  • 詳解Java中日志跟蹤的簡單實現(xiàn)

    詳解Java中日志跟蹤的簡單實現(xiàn)

    MDC?(Mapped?Diagnostic?Context,映射調(diào)試上下文)是?log4j??、logback及l(fā)og4j2??提供的一種方便在多線程條件下記錄日志的功能。本文將利用MDC實現(xiàn)簡單的日志跟蹤,需要的可以參考一下
    2022-08-08
  • Java實現(xiàn)訂單超時未支付自動取消的8種方法總結(jié)

    Java實現(xiàn)訂單超時未支付自動取消的8種方法總結(jié)

    這篇文章主要為大家介紹了Java實現(xiàn)訂單超時未支付自動取消功能的8種不同方法,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2022-08-08

最新評論

大竹县| 合川市| 红桥区| 建宁县| 合肥市| 西畴县| 正宁县| 称多县| 汉阴县| 文化| 昌平区| 龙井市| 香港| 成武县| 奈曼旗| 邛崃市| 富平县| 图木舒克市| 宜昌市| 米脂县| 桃源县| 格尔木市| 尉氏县| 木兰县| 阿拉善右旗| 石泉县| 日照市| 临潭县| 永川市| 泗水县| 寿阳县| 鄂伦春自治旗| 瑞丽市| 长白| 吉林省| 湘潭县| 汉川市| 乌苏市| 乌什县| 潜山县| 平舆县|