介紹
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-hant/n/244188.html