對(duì)比 HashMap,HashTable,TreeMap區(qū)別?很多人不知道。
點(diǎn)擊藍(lán)色“程序職場(chǎng)”關(guān)注我喲
加個(gè)“星標(biāo)”,天天和你一起進(jìn)步

先看再點(diǎn)贊,給自己一點(diǎn)思考的時(shí)間,如果對(duì)自己有幫助,微信搜索【程序職場(chǎng)】關(guān)注這個(gè)執(zhí)著的職場(chǎng)程序員。
價(jià)值:Java技能,面試經(jīng)驗(yàn)指導(dǎo),簡(jiǎn)歷優(yōu)化,職場(chǎng)規(guī)劃指導(dǎo),技能提升方法,講不完的職場(chǎng)故事,個(gè)人成長(zhǎng)經(jīng)驗(yàn)
01
概念
HashMap
HashMap實(shí)現(xiàn)了Map接口,繼承AbstractMap,它是基于哈希表的 Map 接口的實(shí)現(xiàn)。
HashMap是引用數(shù)據(jù)類(lèi)型。
Hashtable
Hashtable:是Map接口的另外一個(gè)實(shí)現(xiàn)類(lèi),和HashMap用法類(lèi)似,同時(shí)也有區(qū)別。
treeMap
TreeMap:基于紅黑樹(shù)(Red-Black tree)的 NavigableMap實(shí)現(xiàn)。該映射根據(jù)其鍵的自然順序進(jìn)行排序,或者根據(jù)創(chuàng)建映射時(shí)提供的Comparator進(jìn)行排序,具體取決于使用的構(gòu)造方法。
02
區(qū)別
1. HashTable的方法是同步的,HashMap未經(jīng)同步,所以在多線程場(chǎng)合要手動(dòng)同步HashMap這個(gè)區(qū)別就像Vector和ArrayList一樣。
?
2. HashTable不允許null值,key和value都不可以,HashMap允許null值,key和value都可以。?
3. HashTable有一個(gè)contains(Object value)功能和containsValue(Object value)功能一樣。?
4. HashTable使用Enumeration,HashMap使用Iterator。??
5. HashTable中hash數(shù)組默認(rèn)大小是11,增加的方式是 old*2+1。HashMap中hash數(shù)組的默認(rèn)大小是16,而且一定是2的指數(shù)。?
6. 哈希值的使用不同,HashTable直接使用對(duì)象的hashCode。
7,這三個(gè)都對(duì)Map接口進(jìn)行了實(shí)現(xiàn)
03
安全性
1.HashMap是不安全的線程,他允許Key值出現(xiàn)一次null?? Value值出現(xiàn)無(wú)數(shù)次的Null
2.Hashtable是安全的線程,他不僅實(shí)現(xiàn)了Map接口也實(shí)現(xiàn)了Dictionary接口,他的key值與Value值都不允許出現(xiàn)Null
3.treeMap 非線程安全 可以進(jìn)行排序的,默認(rèn)按照鍵的自然順序進(jìn)行升序排序,若要進(jìn)行降序排序則需要在構(gòu)造集合時(shí)候傳遞一個(gè)比較器。
04
關(guān)系圖

05
實(shí)例應(yīng)用
class HashMaps{??????????public?static?void?main(String[]?args)??????????{???????????????Map?map=new?HashMap();???????????????????????????map.put(“a”,?“aaa”);???????????????map.put(“b”,?“bbb”);???????????????map.put(“c”,?“ccc”);???????????????map.put(“d”,?“ddd”);???????????????Iterator?iterator?=?map.keySet().iterator();???????????????????????????while?(iterator.hasNext())?{????????????????Object?key?=?iterator.next();????????????????System.out.println(“map.get(key)?is?:”+map.get(key));???}??????????????????????????????Hashtable?tab=new?Hashtable();???????????????????????????tab.put(“a”,?“aaa”);???????????????tab.put(“b”,?“bbb”);???????????????tab.put(“c”,?“ccc”);???????????????tab.put(“d”,?“ddd”);???????????????Iterator?iterator_1?=?tab.keySet().iterator();???????????????while?(iterator_1.hasNext())?{????????????????Object?key?=?iterator_1.next();????????????????System.out.println(“tab.get(key)?is?:”+tab.get(key));???}????????????TreeMap?tmp=new?TreeMap();???????????????????????????tmp.put(“a”,?“aaa”);???????????????tmp.put(“b”,?“bbb”);???????????????tmp.put(“c”,?“ccc”);???????????????tmp.put(“d”,?“ddd”);???????????????Iterator?iterator_2?=?tmp.keySet().iterator();???????????????while?(iterator_2.hasNext())?{????????????????Object?key?=?iterator_2.next();????????????????System.out.println(“tmp.get(key)?is?:”+tmp.get(key));???????????????}????????????????????}???}
文末送書(shū)
文末送書(shū)時(shí)刻!送的書(shū)分別是:
Node.js企業(yè)級(jí)應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn)(北京大學(xué)出版社提供 3本)?
Redis設(shè)計(jì)與實(shí)現(xiàn) (機(jī)械工業(yè)出版社提供 1本)
在此感謝北京大學(xué)出版社,機(jī)械工業(yè)出版社的支持。
送書(shū)規(guī)矩
從留言區(qū)中選中獎(jiǎng)?wù)?,按照留言者的點(diǎn)贊,分享數(shù)選擇,點(diǎn)贊,分享數(shù)高者獲得書(shū)一本,累計(jì)送書(shū) 四本。時(shí)間截止9月18日的20點(diǎn)。
送的書(shū)籍
我是【爾東雙月】一枚執(zhí)著的職場(chǎng)程序員,微信搜索【程序職場(chǎng)】關(guān)注我。別忘了三連啊,點(diǎn)贊、收藏、留言,隨意給,我不挑。
注:如果文章有任何問(wèn)題,歡迎毫不留情地指正。
??赐赀@篇文章的小伙伴收獲滿滿!點(diǎn)個(gè)在看吧~~~三連來(lái)一波~~~
▎好文推薦
點(diǎn)擊?職場(chǎng)我們?nèi)绾螌ふ易约旱亩ㄎ唬殘?chǎng))
點(diǎn)擊?沒(méi)有資源和運(yùn)營(yíng)能力,如何開(kāi)啟副業(yè)之路(副業(yè))
點(diǎn)擊?項(xiàng)目中怎么使用敏捷開(kāi)發(fā)流程(敏捷)
點(diǎn)擊?【程序職場(chǎng)】第一期學(xué)習(xí)資料(java)
點(diǎn)擊?【程序職場(chǎng)】第二期學(xué)習(xí)資料(前端)
▎我的開(kāi)源項(xiàng)目
點(diǎn)擊?一點(diǎn)知識(shí)學(xué)院(Spring boot 開(kāi)源項(xiàng)目)(技能)
點(diǎn)擊?一Eclipse項(xiàng)目如何導(dǎo)入IDEA正常啟動(dòng)(案例:一點(diǎn)知識(shí)學(xué)院)
關(guān)注?程序職場(chǎng) 在后臺(tái)回復(fù):學(xué)習(xí)資料,可獲取一份 精心整理的最新?Java?技術(shù)干貨。右下角點(diǎn)擊 聯(lián)系我 ->「加群學(xué)習(xí)」拉你進(jìn)討論群一起學(xué)習(xí)。
