Set 注重獨(dú)一無(wú)二的性質(zhì),該體系集合用于存儲(chǔ)無(wú)序(存入和取出的順序不一定相同)元素塞俱,值不能重復(fù)。對(duì)象的相等性本質(zhì)是對(duì)象 hashCode 值(java 是依據(jù)對(duì)象的內(nèi)存地址計(jì)算出的此序號(hào))判斷的冕香,如果想要讓兩個(gè)不同的對(duì)象視為相等的改衩,就必須覆蓋 Object 的 hashCode 方法和 equals 方法橙弱。
Set這個(gè)接口下有HashSet具伍、TreeSet及LinkHashSet這三個(gè)常見(jiàn)的實(shí)現(xiàn)類。
- HashSet:HashSet底層實(shí)現(xiàn)是HashMap纵散,利用了map的key不可重復(fù)的性質(zhì)梳码,在map的key存放相應(yīng)的元素,value值是個(gè)常量伍掀,因此HashSet中元素具有不重復(fù)性掰茶,無(wú)序性。
- TreeSet:TreeSet底層是二叉樹蜜笤,因此每次放入元素都會(huì)按照元素的大小放到指定的位置濒蒋,因此它是有序的,且Set中元素同樣具有不重復(fù)性把兔。
- LinkedHashSet:底層實(shí)現(xiàn)是哈希表和鏈表沪伙,且是一個(gè)雙向鏈表。雙向鏈表是鏈表的一種县好,他的每個(gè)數(shù)據(jù)節(jié)點(diǎn)都有兩個(gè)指針?lè)謩e指向直接后繼和直接前驅(qū)围橡,所以從雙向鏈表的任意一個(gè)節(jié)點(diǎn)開始都可以很方便的訪問(wèn)它的前驅(qū)節(jié)點(diǎn)和后繼節(jié)點(diǎn)。因此具有該數(shù)據(jù)結(jié)構(gòu)中的數(shù)據(jù)具有有序并且不重復(fù)的特性缕贡。