Set集合是無(wú)序的(存儲(chǔ)順序和取出順序不一致),元素是不能夠出現(xiàn)重復(fù)的尊浪,具有唯一性匣屡。它的實(shí)現(xiàn)類(lèi)有:
HashSet
- 概述
- 不能保證取出順序
- 特別是它不保證順序恒久不變,順序具有隨機(jī)性
- HashSet集合是如何保證元素的唯一性
- 基于哈希表(元素是鏈表數(shù)組)實(shí)現(xiàn)
- 哈希表依賴(lài)于元素的哈希值存儲(chǔ)
- 保證唯一性依賴(lài)兩個(gè)方法
- int hashCode()
- boolean equals(Object ob)
- 實(shí)現(xiàn)的步驟:
首先比較哈希值是否和已存儲(chǔ)元素的哈希值相同际长,相同繼續(xù)執(zhí)行equals方法耸采,如果返回true兴泥,說(shuō)明該元素已被添加工育,取消添加;否則說(shuō)明該元素沒(méi)有被添加搓彻,則將該元素添加到集合當(dāng)中如绸。 - 存儲(chǔ)自定義對(duì)象
- 在Set集合存儲(chǔ)自定義對(duì)象,同時(shí)保證元素的唯一性旭贬。
- 要求:如果兩個(gè)元素的成員變量都是相同的怔接,則判定為同一元素。
- Set集合保證元素的唯一性依賴(lài)的是hashCode和equals方法稀轨,但是自定義對(duì)象沒(méi)有重寫(xiě)扼脐,所以只能調(diào)用Object中的hashCode和equals方法,就算該元素的成員變量和集合中某個(gè)元素的成員變量都是相同的奋刽,它們的哈希值也是不一致的瓦侮,所以判定該元素未被添加,并執(zhí)行添加操作佣谐。為了達(dá)到自定義對(duì)象在Set集合中的唯一性肚吏,我們必須在自定義對(duì)象的類(lèi)中重寫(xiě)hashCode()和equals()這兩個(gè)方法就可以了。
LinkedHashSet
- 概述
- 基于哈希表和鏈表實(shí)現(xiàn)
- 由鏈表來(lái)保證元素的順序(先進(jìn)先出)
- 由哈希表來(lái)保證元素的唯一性
TreeSet
-概述