當(dāng)前位置:首頁>職場>java 面試hashmap(java中為什么HashTable的K-V不能是null)
發(fā)布時(shí)間:2024-01-24閱讀(13)
HashMap中的key-value可以是null,為什么Hashtable和ConcurrentHashMap中的不可以是null呢?,今天小編就來聊一聊關(guān)于java 面試hashmap?接下來我們就一起去研究一下吧!

java 面試hashmap
問題描述HashMap中的key-value可以是null,為什么Hashtable和ConcurrentHashMap中的不可以是null呢?
思考這個(gè)問題還要從HashMap和HashTable的區(qū)別來說,HashTable內(nèi)的方法是同步的,而HashMap不是;
所以一般來講,HashMap不是線程安全的,一般只用于單線程中;而HashTable則往往用于多線程中;
在允許key - value為null的情況下,考慮下面一個(gè)場景:
map.get(key) 的返回結(jié)果是null,那么是因?yàn)椴淮嬖趯?duì)應(yīng)的key是null呢,還是key對(duì)應(yīng)的value就是null;
對(duì)于單線程來講,這個(gè)問題是可以解決的,通過map.contains(key)就可以判斷,但是對(duì)于多線程來講,要解決這個(gè)問題就很復(fù)雜了,必須由外部保證contains 與 get操作的原子性,正是出于對(duì)這個(gè)問題考慮,所以不允許value為null;(實(shí)際上HashTable中并沒有提供contains方法,也是因?yàn)檫@個(gè)原因)
那么為什么key也不能是null呢?
由于null不是對(duì)象,因此不能在其上調(diào)用.equals()或.hashCode(),因此Hashtable無法將其計(jì)算哈希值以用作鍵。但是HashMap對(duì)此做了特殊處理;
小結(jié)HashTable是很早的一個(gè)類了,JDK已經(jīng)并不推薦使用;
在并發(fā)場景下,更建議使用ConcrrentHashMap
歡迎分享轉(zhuǎn)載→http://www.avcorse.com/read-230920.html
Copyright ? 2024 有趣生活 All Rights Reserve吉ICP備19000289號(hào)-5 TXT地圖HTML地圖XML地圖