日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

【易懂】Java源码角度分析put()与putIfAbsent()的区别——源码分析系列

發(fā)布時(shí)間:2024/2/28 java 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【易懂】Java源码角度分析put()与putIfAbsent()的区别——源码分析系列 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、put()方法

1. 源碼分析

Java中并未給出put()的源碼,因此我們看一下put()方法中給出的注釋:

Associates the specified value with the specified key in this map (optional operation). If the map previously contained a mapping for the key, the old value is replaced by the specified value. (A map m is said to contain a mapping for a key k if and only if m.containsKey(k) would return true.)

翻譯過(guò)來(lái)就是:將key與value映射,如果在此之前存在以key為名稱的映射對(duì),則用新映射替換原來(lái)的舊映射。

2. 用法

Map<Integer, Integer>map = new HashMap<>(); // 定義一個(gè)map map.put(1,2); // 其中1是key,2是value

二、putIfAbsent()

Map容器內(nèi)putIfAbsent()方法的源碼:

1. 源碼分析

default V putIfAbsent(K key, V value) {V v = get(key); // 首先調(diào)用get(key)方法,查看map中是否已經(jīng)存在key值相同的鍵值對(duì)if (v == null) { // 如果不存在,則調(diào)用put()方法插入鍵值對(duì)v = put(key, value);}return v; // 返回該鍵值對(duì)}

也就是說(shuō),putIfAbsent()的作用是為map賦初值。


2. 用法

Map<Integer, Integer>map = new HashMap<>(); // 定義一個(gè)map map.putIfAbsent(1,0);// 查看key為1的值是否存在,如果不存在,將其value的值初始化為0

擴(kuò)展用法:若映射不存在,則建立映射,并賦初值,若存在,則進(jìn)行其他操作

Map<Integer, Integer>map = new HashMap<>(); // 定義一個(gè)map if(map.putIfAbsent(1,0) == null) System.out.println("該映射不存在,建立映射并賦初值"); else {System.out.println("該映射存在,進(jìn)行其他操作"); }

三、二者區(qū)別

put()方法的作用是為map賦值,當(dāng)存在相同的鍵值對(duì)時(shí),會(huì)用新值覆蓋舊值。
putIfAbsent()的作用是是為map賦初值,若存在相同的鍵值對(duì),則不會(huì)進(jìn)行操作。

總結(jié)

以上是生活随笔為你收集整理的【易懂】Java源码角度分析put()与putIfAbsent()的区别——源码分析系列的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。