簡(jiǎn)介
HashMap和HashSet都是collection框架的一部分,它們讓我們能夠使用對(duì)象的集合。collection框架有自己的接口和實(shí)現(xiàn),主要分為Set接口,List接口和Queue接口。它們有各自的特點(diǎn),Set的集合里不允許對(duì)象有重復(fù)的值,List允許有重復(fù),它對(duì)集合中的對(duì)象進(jìn)行索引,Queue的工作原理是FCFS算法(First Come, First Serve)。
什么是HashSet
HashSet實(shí)現(xiàn)了Set接口,它不允許集合中有重復(fù)的值,當(dāng)我們提到HashSet時(shí),第一件事情就是在將對(duì)象存儲(chǔ)在HashSet之前,要先確保對(duì)象重寫equals()和hashCode()方法,這樣才能比較對(duì)象的值是否相等,以確保set中沒(méi)有儲(chǔ)存相等的對(duì)象。如果我們沒(méi)有重寫這兩個(gè)方法,將會(huì)使用這個(gè)方法的默認(rèn)實(shí)現(xiàn)。
public boolean add(Object o)方法用來(lái)在Set中添加元素,當(dāng)元素值重復(fù)時(shí)則會(huì)立即返回false,如果成功添加的話會(huì)返回true。
什么是HashMap
HashMap實(shí)現(xiàn)了Map接口,Map接口對(duì)鍵值對(duì)進(jìn)行映射。Map中不允許重復(fù)的鍵。Map接口有兩個(gè)基本的實(shí)現(xiàn),HashMap和TreeMap。TreeMap保存了對(duì)象的排列次序,而HashMap則不能。HashMap允許鍵和值為null。HashMap是非synchronized的,但collection框架提供方法能保證HashMap synchronized,這樣多個(gè)線程同時(shí)訪問(wèn)HashMap時(shí),能保證只有一個(gè)線程更改Map。
public Object put(Object Key,Object value)方法用來(lái)將元素添加到map中
HashSet和HashMap的區(qū)別

深入了解HashMap和HashSet
-
HashMap的工作原理
1.HashMap的工作原理,知道HashMap的get()方法的工作原理嗎
2.兩個(gè)對(duì)象的hashcode相同會(huì)發(fā)生什么
3.如果兩個(gè)鍵的hashcode相同,你如何獲取值對(duì)象
4.如何重新調(diào)整HashMap的大小
...... -
HashMap多線程并發(fā)問(wèn)題分析
1.并發(fā)問(wèn)題的癥狀
2.HashMap的rehash源代碼
3.(單線程/多線程)Rehash過(guò)程
4.解決方案 - 通過(guò)分析 JDK 源代碼研究 Hash 存儲(chǔ)機(jī)制