如何正確使用Map.computeIfAbsent

介紹

Map.computeIfAbsent是Java 8中引入的Map接口的方法之一,它的作用是基於指定的鍵查找值,如果該鍵不存在,就使用給定的映射函數計算一個新值,並將其與該鍵關聯。該方法可以減少對Map的訪問並簡化代碼。

在本文中,我們將深入探討如何正確使用Map.computeIfAbsent方法,並提供示例代碼。

正文

一、computeIfAbsent方法的基本用法

Map.computeIfAbsent的基本用法非常簡單,它接受兩個參數:要查找的鍵和一個Function對象,該對象負責計算新值。如果Map中不存在該鍵,則會使用Function對象計算一個新值,並將該鍵與新值進行關聯。如果該鍵已經存在,則不執行任何操作。

Map<String, Integer> map = new HashMap<>();
map.put("one", 1);
map.computeIfAbsent("two", key -> 2);
map.computeIfAbsent("one", key -> 3);
System.out.println(map); // 輸出:{one=1, two=2}

在上面的例子中,我們創建了一個HashMap對象並將鍵「one」的值設置為1。然後,我們使用Map.computeIfAbsent方法計算鍵「two」的值為2,並使用相同的方法計算鍵「one」的值為3。由於鍵「one」已經存在於Map中,因此不執行任何操作。最終,我們將Map打印到控制台上,輸出為{one=1, two=2}。

二、computeIfAbsent方法的嵌套使用

在現實生活中,我們常常需要嵌套使用Map.computeIfAbsent方法來實現某些特定的功能。例如,我們可能需要從一個多級的Map中獲取某個值,如果這個值不存在,就通過計算得到該值並將其存儲到Map中。

Map<String, Map<String, Integer>> map = new HashMap<>();
map.computeIfAbsent("A", key -> new HashMap<>()).put("B", 7);
map.computeIfAbsent("C", key -> new HashMap<>())
        .computeIfAbsent("D", key -> 8);
System.out.println(map); // 輸出:{A={B=7}, C={D=8}}

在上面的例子中,我們創建了一個多級Map,並將鍵「A」的值設置為另一個Map對象,它包含鍵「B」和值7。然後,我們使用Map.computeIfAbsent方法從該Map中獲取與鍵「C」對應的Map對象,如果該對象不存在,就創建一個新的Map對象。接下來,我們再次使用Map.computeIfAbsent方法從該Map對象中獲取與鍵「D」對應的值,如果該值不存在,就計算得到並將其存儲到Map中。最終,我們打印出Map對象的內容,輸出為{A={B=7}, C={D=8}}。

三、computeIfAbsent方法的性能優化

Map.computeIfAbsent方法可以用於優化代碼的性能,特別是當需要頻繁訪問Map對象中不存在的鍵時。在這種情況下,使用Map.computeIfAbsent方法可以避免多次訪問Map對象,從而使代碼更加高效。

下面是一個使用Map.computeIfAbsent方法的性能優化示例。在此示例中,我們使用Map.computeIfAbsent方法從Map對象中獲取與字符串數組中的元素對應的數字。如果該數字不存在,則計算數字並將其存儲到Map對象中。

Map<String, Integer> map = new HashMap<>();
String[] strings = {"one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"};
for (String s : strings) {
    map.computeIfAbsent(s, key -> Integer.parseInt(s.substring(s.length() - 1)));
}

在上面的例子中,我們創建了一個字符串數組,並遍歷該數組。對於每個元素,我們使用Map.computeIfAbsent方法從Map中獲取與該元素對應的數字。如果該數字不存在,則計算數字並將其存儲到Map中。通過這種方式,我們可以避免多次訪問Map對象,即使Map對象包含數百萬個鍵值對,代碼的運行速度也會非常快。

總結

在本文中,我們深入探討了如何正確使用Map.computeIfAbsent方法,並提供了示例代碼。我們發現,Map.computeIfAbsent方法可以用於簡化代碼、嵌套使用和性能優化等方面。無論你是初學者還是經驗豐富的Java開發人員,都應該掌握這個方法並靈活運用它。

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

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

相關推薦

  • 如何正確複製聖誕樹程序代碼?

    複製聖誕樹程序代碼是一項基本的技能,無論是初學者還是前端開發專業人員都需要掌握。本文將從多個方面詳細闡述如何正確地複製聖誕樹程序代碼,讓你能夠安心地應對代碼複製難題。 一、代碼複製…

    編程 2025-04-28
  • 深入解析map遍歷刪除

    一、概述 map是C++ STL中用於映射鍵值對的容器,具有一些方便的操作,如insert、find、count等。然而,如果需要根據某些條件刪除元素,就需要遍歷整個map,找到需…

    編程 2025-04-25
  • Java Map containsKey方法詳解

    一、containsKey方法簡介 containsKey方法是Java Map接口中的方法之一,用於判斷Map集合中是否包含某個指定的key,方法返回一個boolean類型值。如…

    編程 2025-04-24
  • JS Map刪除元素詳解

    一、JS刪除DOM元素 在前端開發中,動態地刪除DOM元素是一項常見操作。通過JavaScript,我們可以輕鬆地以編程方式刪除HTML頁面上的元素,從而實現頁面的動態更新。下面是…

    編程 2025-04-24
  • mapreduce.map.java.opts

    一、基本概念 mapreduce.map.java.opts是Hadoop中MapReduce框架中的一個重要的參數,它用於控制map任務中Java虛擬機(JVM)的參數。通常情況…

    編程 2025-04-24
  • 深入理解map轉換為json字符串

    一、map轉換為json字符串 Map是一種鍵值對的數據結構,可以存儲任意類型的對象。在Java中,我們可以將一個Map對象轉換成一個JSON字符串,這個JSON字符串可以用於數據…

    編程 2025-04-23
  • 深入解析Map和FlatMap

    一、Map和FlatMap的基本概念 Map和FlatMap是函數式編程裏面非常重要的兩個概念,它們可以處理一些複雜的數據結構。Map是指對一個數組或者列表的每個元素都執行一定的操…

    編程 2025-04-23
  • 詳解map轉對象

    一、基礎概念 Map是一種鍵值對的數據結構,它是Java中非常常用的數據類型,尤其是在開發中常用於將JSON字符串轉化為對象。Object則是Java中的一個基礎數據類型,它是所有…

    編程 2025-04-23
  • 如何正確校驗Java日期格式?

    Java中對日期的處理是非常重要的,但是在處理日期時,有時候會遇到格式不正確的問題,為了保證程序的正確性,需要對日期格式進行校驗。本文將從多個方面介紹如何正確校驗Java日期格式。…

    編程 2025-04-23
  • c++ map排序詳解

    一、基本介紹 map是c++語言中的一個關聯數組容器,可以在一個鍵和值之間建立一種映射關係。其中,鍵是唯一的,值可以重複。同時,map中的元素是按鍵自動排序的,排序方式可以通過自定…

    編程 2025-04-23

發表回復

登錄後才能評論