精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

高德面試:為什么Map不能插入Null?

開發 前端
在多線程下 null 的二義性問題是不能被證明真偽的(因為在一個線程執行驗證時,可能會有另一個線程改動結果,造成結果不準確),所以 ConcurrentHashMap 為了避免這個二義性問題,所以就在源碼中禁用了 null 值作為 key 或 value。

在 Java 中,Map 是屬于 java.util 包下的一個接口(interface),所以說“為什么 Map 不能插入 null?”這個問題本身問的不嚴謹。Map 部分類關系圖如下:

所以,這里面試官其實想問的是:為什么 ConcurrentHashMap 不能插入 null?

1.HashMap和ConcurrentHashMap的區別

HashMap 和 ConcurrentHashMap 在對待 null 的態度上是不同的,在 Java 中,HashMap 是允許 key 和 value 值都為 null 的,如下代碼所示:

HashMap<String, Object> map = new HashMap();
map.put(null, null);
if (map.containsKey(null)) {
    System.out.println("存在 null");
} else {
    System.out.println("不存在 null");
}

以上程序的執行結果如下:

存在 null

從上述結果可以看出,HashMap 是允許  key 和 value 值都為 null 的。

但 ConcurrentHashMap 就不同了,它不但 key 不能為 null,而且 value 也不能為 null,如以下代碼所示:

ConcurrentHashMap<String, String> concurrentHashMap = new ConcurrentHashMap();
concurrentHashMap.put(null, "javacn.site");
System.out.println(concurrentHashMap.get(null));

在運行以上程序時就會報錯,如下圖所示:

當然,當你為 ConcurrentHashMap 的 value 值設置 null 時也會報錯,如下代碼所示:

String key = "www.avacn.site";
ConcurrentHashMap<String, String> concurrentHashMap = new ConcurrentHashMap();
concurrentHashMap.put(key, null);
System.out.println(concurrentHashMap.get(key));

在運行以上程序時就會報錯,如下圖所示:

因此,我們可以得出結論:

  • 在 HashMap 中,key 和 value 值都可以為 null。
  • 在 ConcurrentHashMap 中,key 或者是 value 值都不能為 null。

2.為什么不能插入null?

如果我們查看 ConcurrentHashMap 的源碼,就能發現為什么 ConcurrentHashMap 不能插入 null 了,以下是 ConcurrentHashMap 添加元素時的部分核心源碼:

// 添加 key 和 value
public V put(K key, V value) {
    return putVal(key, value, false);
}
final V putVal(K key, V value, boolean onlyIfAbsent) {
    // 如果 key 或 value 為 null 的話直接拋出空指針異常
    if (key == null || value == null) throw new NullPointerException();
    int hash = spread(key.hashCode());
    int binCount = 0;
    // 忽略其他代碼......
}

從上述 ConcurrentHashMap 添加元素的第一行源碼就可以看出,當 key 或 value 為 null 時,會直接拋出空指針異常,這就是 ConcurrentHashMap 之所以不能插入 null 的根本原因了,因為源碼就是這樣設計的。

3.更深層次的原因

那么問題來了,為什么 ConcurrentHashMap 的實現源碼中,不允許為 key 或者是 value 設置 null 呢?

這就要從 ConcurrentHashMap 的使用場景說起了,在 Java 中,ConcurrentHashMap 是用于并發環境中執行的線程安全的容器,而 HashMap 是用于單線程環境下執行的非線程安全的容器,而并發環境下的運行更復雜,如果我們允許 ConcurrentHashMap 的 key 或者是 value 為 null 的情況下,就會存在經典的“二義性問題”。

(1)什么是二義性問題?

所謂的二義性問題指的是代碼或表達式存在多種理解或解釋,導致程序的含義不明確或模糊。

以 ConcurrentHashMap 不允許為 null 的二義性問題來說,null 其實有以下兩層含義:

  • 這個值本身設置的是 null,null 在這里表示的是一種具體的“null”值狀態。
  • null 還表示“沒有”的意思,因為沒有設置,所以啥也沒有。

所以,如果 ConcurrentHashMap 允許插入 null 值,那么就會存在二義性問題。

那就有同學會問了,為什么 HashMap 允許插入 null,它就不怕有二義性問題嗎?

(2)可證偽的HashMap

HashMap 之所以不怕二義性問題的原因是,HashMap 的設計是給單線程使用的,而單線程下的二義性問題是能被證明真偽的,所以也就不存在二義性問題了(能被證明的問題就不是二義性問題)

例如,當我們給 HashMap 的 key 設置為 null 時,我們可以通過 hashMap.containsKey(key) 的方法來區分這個 null 值到底是存入的 null?還是壓根不存在的 null?這樣二義性問題就得到了解決,所以 HashMap 的二義性問題可被證明真偽,所以就不怕二義性問題,因此也就可以給 key 或者 value 設置 null 了。

(3)不可證偽的ConcurrentHashMap

而 ConcurrentHashMap 就不一樣了,因為 ConcurrentHashMap 是設計在多線程下使用的,而多線程下的二義性問題是不能被證明真偽的,所以二義性問題是真實存在的。

因為在你在證明二義性問題的同時,可能會有另一個線程影響你的執行結果,所以它的二義性問題就一直存在。

例如,當 ConcurrentHashMap 未設置 key 為 null 時,會有這樣一個場景,當一個線程 A 調用了 concurrentHashMap.containsKey(key),我們期望返回的結果是 false,但在我們調用 concurrentHashMap.containsKey(key) 之后,未返回結果之前,線程 B 又調用了 concurrentHashMap.put(key,null) 存入了 null 值,那么線程 A 最終返回的結果就是 true 了,這個結果和我們之前預想的 false 完全不一樣,這就是不能被證偽的二義性問題。

所以說,多線程的執行比較復雜,在多線程下 null 的二義性問題是不能被證明真偽的(因為在一個線程執行驗證時,可能會有另一個線程改動結果,造成結果不準確),所以 ConcurrentHashMap 為了避免這個二義性問題,所以就在源碼中禁用了 null 值作為 key 或 value。

責任編輯:姜華 來源: Java中文社群
相關推薦

2022-01-27 07:02:52

JavaHashMap單線程

2022-05-08 18:18:40

JDKValueHashMap

2010-08-12 10:54:26

惠普

2023-07-03 08:15:46

MySQLInnoDB

2022-05-18 08:25:59

MySQLutf8字符集數據庫

2023-08-22 20:43:09

HashMap單線程null

2025-09-22 01:55:00

JStypeof??網頁

2021-07-30 06:49:40

SSD內存CPU

2022-05-22 21:23:10

前端監控系統

2012-12-18 11:55:38

2022-02-15 07:03:04

start 源碼run線程

2025-02-24 16:00:00

JavaScripMap開發

2012-07-24 10:17:33

甲骨文

2021-08-05 12:41:57

高并發性能CAS

2023-12-08 08:40:16

函數

2013-10-29 10:24:31

程序員漫畫

2023-09-14 13:23:42

Llama-2模型參數

2023-08-29 07:46:08

Redis數據ReHash

2022-07-27 07:36:01

TCP可靠性

2025-06-04 02:55:00

MySQLNULL類型
點贊
收藏

51CTO技術棧公眾號

欧美日韩一区成人| 亚洲爱情岛论坛永久| 超碰国产在线| 加勒比久久高清| 蜜臀av一区二区| 精品国产一区二区亚洲人成毛片| 亚洲三区视频| 久久久免费高清视频| 91精品国产乱码久久久竹菊| 国产精品看片你懂得| 国产成人精品在线| 最近日本中文字幕| 成年网站在线视频网站| 国产精品一区二区久久精品爱涩| 在线播放日韩专区| 中文字幕在线观看第三页| 色综合久久久久久| 亚洲国产欧美国产综合一区| 在线成人av网站| 一区二区三区四区五区视频| 欧美另类一区二区| 免费看成人人体视频| 亚洲高清在线视频| 国产精品久久久对白| 欧美爱爱小视频| 久久av网站| 一区二区三区产品免费精品久久75| 91色琪琪电影亚洲精品久久| 男女做暖暖视频| 日韩一二三区在线观看| 亚洲黄一区二区三区| 99超碰麻豆| 久久久久久久久久久久久久久久久| 精品三级久久久| 日本久久电影网| 亚洲一卡二卡三卡| 亚洲人午夜射精精品日韩| 国产日韩1区| 亚洲男人的天堂在线| 国产精品少妇在线视频| 成人好色电影| 久久久不卡影院| 国产久一一精品| 成年人午夜剧场| 成人同人动漫免费观看| 91精品国产综合久久久久久久久久 | 欧美怡春院一区二区三区| 第一页在线视频| 在线电影福利片| www.日韩精品| 日韩av日韩在线观看| 国产又黄又粗视频| 精品一区二区三区中文字幕在线 | 国产精品久久久久久久浪潮网站| 成人信息集中地欧美| 久久久久香蕉视频| 欧美一区二区三区另类| 亚洲国产精品久久91精品| 国产又黄又大又粗视频| 视频一区二区三区不卡| 高清不卡一区二区| 日韩美女视频中文字幕| www.国产色| 久久狠狠婷婷| 久操成人在线视频| av在线网站观看| 成人在线精品| 日韩欧美在线字幕| 色中文字幕在线观看| 先锋av资源站| 91麻豆高清视频| 亚洲www在线| 日韩在线 中文字幕| 欧美福利一区| 久久久噜噜噜久久| 亚洲一级二级片| 亚洲日产av中文字幕| 91麻豆精品91久久久久同性| 亚洲三级在线视频| 成人国产一区二区三区精品麻豆| 亚洲成av人片观看| 欧美日韩视频免费在线观看| yellow91字幕网在线| 欧美国产禁国产网站cc| 精品无码久久久久久久动漫| a在线观看免费| 日韩不卡在线观看日韩不卡视频| 色综合久久久888| 日韩福利片在线观看| 一区二区中文字| 一区二区亚洲精品国产| 成人午夜免费影院| 国内成人精品| 日韩激情av在线免费观看| 久久久国产精品久久久| 国产一区高清| 在线观看成人小视频| 欧美不卡在线播放| 乱插在线www| 日韩理论片在线| 亚洲欧美久久234| 国产免费av高清在线| 99r国产精品| 黄色99视频| av中文在线| 精品久久香蕉国产线看观看亚洲| 欧洲精品在线播放| 羞羞的视频在线看| 亚洲精品v日韩精品| 欧美污视频网站| 免费成人动漫| 在线观看视频一区二区欧美日韩| 毛片毛片毛片毛片毛| 亚洲欧美日本伦理| 久久99热这里只有精品国产| 国产免费www| 青娱乐精品视频在线| 国产精品69av| 丰满岳乱妇国产精品一区| www.欧美精品一二区| 亚洲高清精品中出| 丁香六月综合| 亚洲成人亚洲激情| 少妇被躁爽到高潮无码文| 日本不卡免费在线视频| 精品国产综合久久| 性xxxfreexxxx性欧美| 欧美午夜精品免费| 在线黄色免费看| 欧美成年网站| 视频在线观看一区二区| 午夜剧场免费在线观看| 综合日韩在线| 国产日本欧美在线观看| 国产色在线视频| 国产91丝袜在线观看| 亚洲欧洲久久| 91超碰碰碰碰久久久久久综合| 精品性高朝久久久久久久| 性猛交ⅹxxx富婆video| 一区二区三区导航| 国产精品人成电影在线观看| 国产精品国产一区二区三区四区 | 91网免费观看| 手机看片国产1024| 伊人开心综合网| 国产九九九视频| 91精品一区二区三区综合在线爱| 久久99国产综合精品女同| 91成品人影院| 91在线免费播放| 国内精品视频一区二区三区| 91亚洲视频| 最新日韩中文字幕| 91麻豆国产视频| 亚洲色图在线播放| 色男人天堂av| 亚洲激情欧美| 国产精品视频免费一区二区三区| 操喷在线视频| 日韩精品久久久久| 波多野结衣 久久| 欧美国产精品中文字幕| 国产一伦一伦一伦| 美国一区二区| 国产成人精品日本亚洲专区61| 黑人与亚洲人色ⅹvideos | 先锋影音一区二区三区| 91麻豆免费在线视频| 日韩美一区二区三区| 51妺嘿嘿午夜福利| 亚洲一本视频| 国产免费观看久久黄| 日本在线视频网| 日韩一区国产二区欧美三区| 国产精品成人无码免费| 另类小说一区二区三区| 久久久久久99| 亚洲精品白浆| 亚洲激情在线观看| 欧美成人手机视频| 9色porny自拍视频一区二区| 日本成人在线免费视频| 99久久精品国产亚洲精品| 日本精品视频网站| 91精彩视频在线观看| 一本久久a久久免费精品不卡| 精品人妻无码中文字幕18禁| 亚洲一区二区动漫| 一区二区视频在线免费| 国产精品45p| 欧美成人亚洲成人日韩成人| 一级特黄aaaaaa大片| 一区二区三区欧美激情| 中文字字幕码一二三区| 国产在线精品免费| 中文字幕一区二区三区乱码| www.国产精品一区| 欧美精品久久久久久久| 国产99视频在线| 色综合天天综合色综合av | 亚洲亚洲精品在线观看| 亚洲第一天堂久久| 99精品在线| 国模一区二区三区私拍视频| h片精品在线观看| 日韩免费电影网站| 欧美成人精品网站| 国产日韩v精品一区二区| 97成人在线观看视频| 99tv成人| 91中文字幕在线观看| 久久人体大尺度| 久久99久国产精品黄毛片入口| 东热在线免费视频| 亚洲精品国产精品国产自| 国产精品无码免费播放| 色狠狠色狠狠综合| 中日韩精品视频在线观看| 99精品桃花视频在线观看| 奇米视频7777| 免费日本视频一区| 免费在线激情视频| 亚洲国产精品第一区二区| 男同互操gay射视频在线看| 日韩精品视频在线看| 国产精品视频最多的网站| 亚洲风情在线资源| 中文字幕亚洲第一| 一区二区三区午夜| 在线免费观看成人短视频| 亚洲黄色三级视频| 亚洲va韩国va欧美va| 久久香蕉精品视频| 一区二区在线观看av| 婷婷久久综合网| 自拍偷在线精品自拍偷无码专区| 涩多多在线观看| 亚洲人成高清| 91黄色在线看| 国产成人ay| 欧美精品七区| 久久综合给合| 91日韩在线播放| 国内精品视频| 5566av亚洲| 伊人久久噜噜噜躁狠狠躁| 亚洲xxxx做受欧美| 精品国产亚洲一区二区三区在线 | 最新国产精品视频| 国产精品久久久久久一区二区| 蜜桃视频www网站在线观看| 国产一区二区三区直播精品电影 | 日韩精品久久久久久久软件91| 国产乱人伦真实精品视频| 999国产精品亚洲77777| 国产美女久久久| 久久在线观看| 韩国成人动漫在线观看| 日韩有码一区| 91探花福利精品国产自产在线| 成人免费一区| 91久久精品久久国产性色也91| gogo大尺度成人免费视频| 日本午夜人人精品| 成人免费av电影| 久久久亚洲精选| 不卡视频观看| 不卡av在线网站| 欧美女v视频| 欧美成人video| 在线观看中文字幕码| 欧美日韩国产精品专区 | 一区二区理论电影在线观看| 免费在线一级片| 国产精品国产三级国产aⅴ无密码| 欧美精品日韩在线| 91蝌蚪porny| 国产91丝袜美女在线播放| 最新成人av在线| 久久精品无码人妻| 亚洲欧美激情插| 手机毛片在线观看| 亚洲免费观看高清完整版在线观看| 九九热国产精品视频| 欧美日韩中文字幕在线| 在线免费a视频| 精品日韩99亚洲| wwwww在线观看免费视频| 不用播放器成人网| 一区二区精品伦理... | 亚洲网站免费观看| 欧美一区二区三级| 完全免费av在线播放| 国产极品美女在线| 精品国产成人在线| 伊人网av在线| 在线观看不卡视频| 国产成人a人亚洲精品无码| 精品丝袜一区二区三区| 麻豆网站视频在线观看| 日韩中文在线视频| av在线网页| 91精品在线播放| 免费视频一区三区| 日韩精品免费一区| 午夜亚洲福利| 男人舔女人下面高潮视频| 国产高清成人在线| 日本亚洲一区二区三区| 国产亚洲欧美激情| 在线看成人av| 91精品国产欧美一区二区成人| 亚洲欧美一区二区三| 欧美精品生活片| 国产91在线播放精品| 精品一区日韩成人| 国产伊人精品| 精品少妇在线视频| 久久av老司机精品网站导航| 91精品999| 国产三级久久久| 伊人久久综合视频| 欧美xxxx在线观看| 国产福利在线播放麻豆| 国产精品一区二区久久久| 亚洲综合福利| 可以在线看的av网站| 国产黄人亚洲片| 中文字幕另类日韩欧美亚洲嫩草| 精品视频999| yw193.com尤物在线| 国产成人精彩在线视频九色| 日韩精品a在线观看91| 超碰成人免费在线| 国产成a人无v码亚洲福利| 91麻豆免费视频网站| 欧美美女bb生活片| 色网站在线看| 国产一区二区在线免费| 日韩激情免费| 人人妻人人澡人人爽欧美一区双| 韩国欧美国产1区| 国产肉体xxxx裸体784大胆| 日本一区二区视频在线| 欧美色图一区二区| 日韩一区二区高清| 亚洲91av| 国产精品18毛片一区二区| 久久99性xxx老妇胖精品| 阿v天堂2017| 26uuu色噜噜精品一区二区| 久久亚洲天堂网| 亚洲欧美变态国产另类| 欧美极品免费| 成人黄动漫网站免费| 国产精品豆花视频| 美女黄色一级视频| 国产精品进线69影院| 夜夜躁很很躁日日躁麻豆| 日韩最新中文字幕电影免费看| 精品一性一色一乱农村| 国产精品视频入口| 欧美亚洲自偷自偷| 欧美人与性动交α欧美精品| 玉米视频成人免费看| 亚洲精品久久久久久动漫器材一区| 欧美精品久久久久久久久久| 婷婷成人影院| 激情五月亚洲色图| 成人精品亚洲人成在线| 亚洲天堂成人av| 日韩欧美aaa| 午夜在线免费观看视频| 91色视频在线导航| 亚洲国产第一| 亚洲日本精品视频| 欧美一区二区久久| 182在线视频观看| 日韩精品一区二区三区丰满| 国产婷婷精品| 黄色av免费播放| 日韩一区二区视频在线观看| 麻豆蜜桃在线观看| 亚洲一区二区在线观| 成人手机在线视频| 中文字幕免费高清在线观看| 久久99久久99精品免观看粉嫩| 日韩成人午夜| 伊人国产在线视频| 亚欧色一区w666天堂| av播放在线| 国产精品一 二 三| 久久福利资源站| 亚欧视频在线观看| 日韩在线视频中文字幕| 久久97精品| www.色.com| 91成人国产精品| 91超碰免费在线|