亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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)文章

  • Java中的ThreadPoolExecutor線程池詳解

    Java中的ThreadPoolExecutor線程池詳解

    這篇文章主要介紹了Java中的ThreadPoolExecutor線程池詳解,當線程池中的線程數(shù)大于 corePoolSize 時,keepAliveTime 為多余的空閑線程等待新任務(wù)的最長時間,超過這個時間后多余的線程將被終止,需要的朋友可以參考下
    2023-12-12
  • Spring Boot實現(xiàn)STOMP協(xié)議的WebSocket的方法步驟

    Spring Boot實現(xiàn)STOMP協(xié)議的WebSocket的方法步驟

    這篇文章主要介紹了Spring Boot實現(xiàn)STOMP協(xié)議的WebSocket的方法步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • 使用arthas命令redefine實現(xiàn)Java熱更新(推薦)

    使用arthas命令redefine實現(xiàn)Java熱更新(推薦)

    今天分享一個非常重要的命令 redefine ,主要作用是加載外部的 .class 文件,用來替換 JVM 已經(jīng)加載的類,總結(jié)起來就是實現(xiàn)了 Java 的熱更新,感興趣的朋友跟隨小編一起看看吧
    2020-05-05
  • 從dubbo源碼分析qos-server端口沖突問題及解決

    從dubbo源碼分析qos-server端口沖突問題及解決

    這篇文章主要介紹了從dubbo源碼分析qos-server端口沖突問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Java使用@Autowired注解獲取對象為null的幾種情況及解決方法

    Java使用@Autowired注解獲取對象為null的幾種情況及解決方法

    這篇文章主要給大家介紹了使用@Autowired注解獲取對象為null的幾種情況以及?解決方法,文中有詳細的代碼示例講解,具有一定的參考價值,需要的朋友可以參考下
    2023-09-09
  • 深入淺析springboot中static和templates區(qū)別

    深入淺析springboot中static和templates區(qū)別

    這篇文章主要介紹了springboot中static和templates區(qū)別,本文通過圖文實例代碼相結(jié)合給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • SpringBoot通過注解監(jiān)測Controller接口的代碼示例

    SpringBoot通過注解監(jiān)測Controller接口的代碼示例

    在Spring Boot中,度量指標(Metrics)是監(jiān)控和診斷應(yīng)用性能與行為的重要工具,Spring Boot通過集成Micrometer和Spring Boot Actuator,提供了強大的度量指標收集與暴露功能,本文介紹了SpringBoot通過注解監(jiān)測Controller接口,需要的朋友可以參考下
    2024-07-07
  • 簡單談?wù)凧ava中的方法和方法重載

    簡單談?wù)凧ava中的方法和方法重載

    下面小編就為大家?guī)硪黄唵握務(wù)凧ava中的方法和方法重載。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • Java多種經(jīng)典排序算法(含動態(tài)圖)

    Java多種經(jīng)典排序算法(含動態(tài)圖)

    排序算法是老生常談的了,但是在面試中也有會被問到,例如有時候,在考察算法能力的時候,不讓你寫算法,就讓你描述一下,某個排序算法的思想以及時間復(fù)雜度或空間復(fù)雜度。我就遇到過,直接問快排的,所以這次我就總結(jié)梳理一下經(jīng)典的十大排序算法以及它們的模板代碼
    2021-04-04
  • 5種解決Java獨占寫文件的方法

    5種解決Java獨占寫文件的方法

    這篇文章主要介紹了5種解決Java獨占寫文件的方法,需要的朋友可以參考下
    2015-12-12

最新評論