LinkedHashMap的有序屬性

LinkedHashMap是Java提供的一種Map集合類型,繼承於HashMap並實現了Map介面和雙向鏈表數據結構。相比HashMap,它可以在保持快速查找的同時,保證迭代順序和插入順序是一致的。這就意味著它是有序的。

一、keyset有序嗎

LinkedHashMap的keyset是有序的,輸出順序和插入順序一致。其實這個也是由雙向鏈表的結構所決定的,因為每一個元素在插入的時候都會被封裝成為Entry類型,並存儲在一個雙向鏈表中,因此在訪問keyset的時候,就會按照鏈表的順序返回。

    LinkedHashMap map = new LinkedHashMap();
    map.put("apple", 1);
    map.put("pear", 2);
    map.put("banana", 3);
    for (String key : map.keySet()) {
        System.out.println(key);
    }
    // 輸出結果為:
    // apple
    // pear
    // banana

二、LinkedHashMap有序遍歷

如果需要遍歷整個LinkedHashMap,我們可以使用entrySet()方法,該方法會返回一個有序的集合,裡面包含了所有的Entry元素,然後我們可以根據entry的key和value進行相應的操作。

    LinkedHashMap map = new LinkedHashMap();
    map.put("apple", 1);
    map.put("pear", 2);
    map.put("banana", 3);
    for (Map.Entry entry : map.entrySet()) {
        System.out.println(entry.getKey() +" - "+ entry.getValue());
    }
    // 輸出結果為:
    // apple - 1
    // pear - 2
    // banana - 3

三、ConcurrentHashMap有序嗎

相比之下,ConcurrentHashMap是沒有順序保障的。雖然它內部也有一個對於迭代順序有保障的結構類似於Segment,不過ConcurrentHashMap為了支持高並發,限制了各種鎖的範圍,導致它無法對於整個Map進行順序的保證。

四、LinkedHashMap有序還是無序

LinkedHashMap是有序的,這可以從其構造函數中第三個參數accessOrder為true時得到體現。如果該參數的值為true,則在對Map中的元素進行get()、put()、putAll()操作時,都會將元素移到最後一個位置,因此訪問順序也可以通過這個方式被保證。

    LinkedHashMap map = new LinkedHashMap(16, 0.75f, true);
    map.put("apple", 1);
    map.put("pear", 2);
    map.put("banana", 3);
    map.get("apple"); // 讓apple成為最後訪問的元素
    for (String key : map.keySet()) {
        System.out.println(key);
    }
    // 輸出結果為:
    // pear
    // banana
    // apple

五、LinkedHashMap為什麼有序

LinkedHashMap之所以有序,是因為在Map中維護了一個雙向鏈表,他被稱為記錄插入順序或者訪問順序。這個雙向鏈表記錄了每一個元素的插入或訪問順序,所以每次遍歷都是按照這個順序進行的。如果我們需要改變這個順序,可以使用accessOrder參數設置,該參數會讓LinkedHashMap在對元素進行get()、put()、putAll()操作時將元素移到最後一個位置,這樣就保證了遍歷順序。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/291026.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-24 13:13
下一篇 2024-12-24 13:13

相關推薦

  • 全面解讀數據屬性r/w

    數據屬性r/w是指數據屬性的可讀/可寫性,它在程序設計中扮演著非常重要的角色。下面我們從多個方面對數據屬性r/w進行詳細的闡述。 一、r/w的概念 數據屬性r/w即指數據屬性的可讀…

    編程 2025-04-29
  • Vant ContactList 增加屬性的實現方法

    在使用前端UI框架Vant中的ContactList組件時,我們有時需要為此組件增加一些個性化的屬性,來滿足我們特定的需求。那麼,如何實現ContactList組件的增加屬性功能呢…

    編程 2025-04-29
  • 使用PHP foreach遍歷有相同屬性的值

    本篇文章將介紹如何使用PHP foreach遍歷具有相同屬性的值,並給出相應的代碼示例。 一、基礎概念 在講解如何使用PHP foreach遍歷有相同屬性的值之前,我們需要先了解幾…

    編程 2025-04-28
  • PowerDesigner批量修改屬性

    本文將教您如何使用PowerDesigner批量修改實體、關係等對象屬性。 一、選擇要修改的對象 首先需要打開PowerDesigner,並選擇要修改屬性的對象。可以通過以下兩種方…

    編程 2025-04-27
  • 子類 builder() 沒有父類的屬性

    本文將從以下幾個方面對子類 builder() 缺少父類屬性進行詳細闡述: 一、Subclassing with the Builder Pattern 在實現 builder 模…

    編程 2025-04-27
  • Python中的delattr:一個多功能的屬性刪除方法

    在Python編程中,delattr()是一個十分強大常用的函數,可以方便的刪除一個對象的屬性,並且使用起來非常靈活。接下來將從多個方面詳細闡述Python中的delattr()方…

    編程 2025-04-27
  • JavaScript中修改style屬性的方法和技巧

    一、基本概念和方法 style屬性是JavaScript中一個非常重要的屬性,它可以用來控制HTML元素的樣式,包括顏色、大小、字體等等。這裡介紹一些常用的方法: 1、通過Java…

    編程 2025-04-25
  • HTMLButton屬性及其詳細闡述

    一、button屬性介紹 button屬性是HTML5新增的屬性,表示指定文本框擁有可供點擊的按鈕。該屬性包括以下幾個取值: 按鈕文本 提交 重置 其中,type屬性表示按鈕類型,…

    編程 2025-04-25
  • display屬性的多方位應用

    一、display屬性概述 display屬性是CSS中常用的一個屬性,它定義了一個元素的盒模型類型,以及其在頁面上的布局形式。在HTML文檔中,每個HTML標籤都有一個默認的di…

    編程 2025-04-23
  • 微信小程序image屬性詳解

    微信小程序開發以其輕量、高效、便利為特點,深受開發者喜愛。image屬性作為基礎組件之一,在開發過程中也扮演著重要的角色。本文將從微信小程序image顯示不出來、微信小程序imag…

    編程 2025-04-23

發表回復

登錄後才能評論