Java中Map.getOrDefault()方法舉例詳解
前言
在Java編程中,Map接口是一個非常重要的集合類型,它存儲鍵值對(key-value pairs)。隨著Java 8的發(fā)布,java.util.Map接口引入了許多新的默認方法,其中之一就是getOrDefault()。這個方法為開發(fā)者提供了一種簡潔的方式來訪問映射中的元素,并且當給定的鍵不存在時可以返回一個默認值。本文將詳細介紹getOrDefault()方法的工作原理、用法以及一些實際應用場景。
getOrDefault() 方法的正式定義如下:
default V getOrDefault(Object key, V defaultValue)
- key:這是你想要查找的鍵。
- defaultValue:如果key沒有對應的值,則該參數(shù)指定應返回的默認值。
工作機制
當你調(diào)用 map.getOrDefault(key, defaultValue) 時,首先會檢查map中是否存在與key關(guān)聯(lián)的條目。如果存在這樣的條目,那么它的值就會被返回;反之,如果沒有找到匹配的鍵,那么就直接返回傳入的defaultValue。
這種方法避免了傳統(tǒng)上可能需要寫的冗長代碼,比如先通過containsKey()判斷是否含有某個鍵,然后再根據(jù)結(jié)果決定是獲取值還是使用默認值。這種簡化不僅使得代碼更加簡潔易讀,同時也減少了潛在的錯誤源。
實際應用案例
假設我們有一個應用程序用來統(tǒng)計網(wǎng)站用戶的點擊次數(shù)。我們可以使用HashMap<String, Integer>來存儲每個用戶ID及其對應的點擊數(shù)。但是,在第一次記錄某個新用戶的行為之前,這個用戶的ID不會出現(xiàn)在我們的映射中。這時,getOrDefault()就能派上大用場:
Map<String, Integer> userClicks = new HashMap<>(); // 假設這里有一些邏輯處理... int userIdClicks = userClicks.getOrDefault(userId, 0); userClicks.put(userId, userIdClicks + 1);
在這個例子中,對于一個新的用戶ID,getOrDefault()確保了即使該ID尚未存在于映射中也能正確地初始化其點擊計數(shù)為0,之后再遞增這一數(shù)值。這樣我們就能夠安全地更新所有用戶的點擊數(shù)據(jù)而不用擔心出現(xiàn)空指針異?;蝾愃频腻e誤。
性能考量
雖然getOrDefault()提供了很大的便利性,但在性能敏感的應用場景下仍需謹慎使用。特別是當defaultValue計算成本較高時,頻繁調(diào)用此方法可能會導致不必要的開銷。因此,在設計系統(tǒng)時應該權(quán)衡簡潔性和效率之間的關(guān)系。
總之,Map.getOrDefault() 是Java 8引入的一個極其有用的功能,它簡化了從映射中檢索數(shù)據(jù)的過程,并且能夠優(yōu)雅地處理缺失鍵的情況。合理利用這項功能可以幫助開發(fā)人員編寫出更清晰、更可靠的程序。隨著經(jīng)驗的增長,您將會發(fā)現(xiàn)更多適合應用getOrDefault()的情境,從而進一步提升自己的編程技巧。
附:算法題
題目:一個整型數(shù)組里除了兩個數(shù)字之外,其他的數(shù)字都出現(xiàn)了兩次,請寫程序找出這兩個只出現(xiàn)一次的數(shù)字
代碼:
import java.util.*;
class Main {
public static void FindNumsAppearOnce(int [] array) {
int res=0;
boolean flag=true;
Map<Integer,Integer> map=new HashMap();
for(int i=0;i<array.length;i++){
map.put(array[i], map.getOrDefault(array[i], 0) + 1);
}
for(int j=0;j<array.length;j++){
if(map.get(array[j])==1&&flag==true){
System.out.println(array[j]);
flag=false;
}
else if(map.get(array[j])==1&&flag==false){
System.out.println(array[j]);
}
}
}
public static void main(String[] args) {
int a[]={2,2,3,3,4,6,5,5};
FindNumsAppearOnce(a);
}
}
總結(jié)
到此這篇關(guān)于Java中Map.getOrDefault()方法舉例詳解的文章就介紹到這了,更多相關(guān)Java中Map.getOrDefault()方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringSecurity中的EnableWebSecurity注解啟用Web安全詳解
這篇文章主要介紹了SpringSecurity中的EnableWebSecurity注解啟用Web安全詳解,@EnableWebSecurity是Spring?Security用于啟用Web安全的注解,典型的用法是該注解用在某個Web安全配置類上,實現(xiàn)了接口,需要的朋友可以參考下2023-12-12
SpringBoot 動態(tài)配置Profile環(huán)境的方式
這篇文章主要介紹了SpringBoot 動態(tài)配置Profile環(huán)境的方式,本文通過圖文實例相結(jié)合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-10-10
SpringBoot中使用?ThreadLocal?進行多線程上下文管理及注意事項小結(jié)
本文詳細介紹了ThreadLocal的原理、使用場景和示例代碼,并在SpringBoot中使用ThreadLocal保存請求中攜帶的用戶信息,ThreadLocal通過為每個線程維護獨立的變量副本,解決了線程安全問題,感興趣的朋友一起看看吧2025-02-02
java:try...catch跳過異常繼續(xù)處理循環(huán)問題
這篇文章主要介紹了java:try...catch跳過異常繼續(xù)處理循環(huán)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10

